一个大学电脑系统通过下面的规则确定学生的用户名:
1. 用户名长度不超过MAXLENMAXLEN个字符。
2. 用户名第一个字符为这个人的first name,转换成小写,忽略非字母的字符
3. 把这个人的last name加到用户名后面(小写),如果超出MAXLENMAXLEN,只保留前MAXLENMAXLEN个字符。
4. 如果规则1~3产生的用户名在数据库中已经存在,若用户名长度为MAXLENMAXLEN,则用户名后面删去最后1个字符,加0~9(按顺序),以保证长度不会超过MAXLENMAXLEN;否则直接加0~9。
5. 如果规则1~4产生的用户名在数据库中已经存在,若用户名长度为MAXLENMAXLEN或MAXLEN−1MAXLEN-1,则用户名后面删去最后几个字符,加10~99(按顺序),以保证长度不会超过MAXLENMAXLEN;否则直接加10~99。
6. 假设上述规则能覆盖所有输入情况。

输入

输入有多组数据,对于每组数据,第一行2个正整数n(n≤200)n(n\leq200)和MAXLENMAXLEN。接下来nn行,每行一个学生的姓名,不超过80个字符。first name, middle name, last name用空格隔开。大小写和符号不定。
n=MAXLEN=0n=MAXLEN=0表示输入结束。

输出

对于每组数据,第一行包含数据组序号,接下来几行每行一个用户名,对应输入的学生姓名。

样例输入

2 6
Jenny Ax
Christos H Papadimitriou
11 8
Jean-Marie d’Arboux
Jean-Marie A d’Arboux
Jean-Marie B d’Arboux
Jean-Marie C d’Arboux
Jean-Marie D d’Arboux
Jean-Marie D d’Arboux
Jean-Marie F d’Arboux
Jean-Marie G d’Arboux
Jean-Marie H d’Arboux
Jean-Marie I d’Arboux
Jean-Marie J d’Arboux
11 9
Jean-Marie d’Arboux
Jean-Marie A d’Arboux
Jean-Marie B d’Arboux
Jean-Marie C d’Arboux
Jean-Marie D d’Arboux
Jean-Marie D d’Arboux
Jean-Marie F d’Arboux
Jean-Marie G d’Arboux
Jean-Marie H d’Arboux
Jean-Marie I d’Arboux
Jean-Marie J d’Arboux
0 0

样例输出

Case 1
jax
cpapad
Case 2
jdarboux
jdarbou1
jdarbou2
jdarbou3
jdarbou4
jdarbou5
jdarbou6
jdarbou7
jdarbou8
jdarbou9
jdarbo10
Case 3
jdarboux
jdarboux1
jdarboux2
jdarboux3
jdarboux4
jdarboux5
jdarboux6
jdarboux7
jdarboux8
jdarboux9
jdarbou10

题解

Java大法好

import java.util.*;
import java.util.stream.Collectors;public class p5739 {public static void main(String[] args) throws Exception {Scanner scanner = new Scanner(System.in);int kase = 0;while (true) {int n = scanner.nextInt(), maxlen = scanner.nextInt();if (n == 0 && maxlen == 0) break;scanner.nextLine();HashSet<String> set = new HashSet<>();System.out.printf("Case %d\n", ++kase);while (--n >= 0) {String name = scanner.nextLine();String[] names = name.split(" ");String first = names[0];String last = names[names.length - 1];String original = new StringBuilder().appendCodePoint(first.toLowerCase().chars().filter(Character::isAlphabetic).findFirst().getAsInt()).append(last.toLowerCase().codePoints().filter(Character::isAlphabetic).collect(StringBuilder::new,StringBuilder::appendCodePoint, StringBuilder::append).toString()).toString();if (original.length() > maxlen)original = original.substring(0, maxlen);String ans = original;int len = 1, roll = 0, sq = 1;while (set.contains(ans)) {++roll;if (roll >= sq * 10) {++len; sq *= 10;}if (maxlen - len > original.length())ans = original + roll;elseans = original.substring(0, maxlen - len) + roll;}set.add(ans);System.out.println(ans);}}}
}

UVALive 5739|User Names|模拟相关推荐

  1. UVALive 7139 Rotation(模拟)

    思路:模拟题,留意到其实左右操作是会抵消的,所以只用考虑上下就好了 #include<iostream> #include<cstdio> #include<vector ...

  2. UVALive - 7139(差分+模拟)

    题目链接 参考 题意 N*M的网格,一辆车沿着网格线按给定路线走,每个网格里有一个人,人的视线始终看着车,问这些人净转圈数的平方和. 分析 由于车的起点和终点都为左上角,且每个格子里的人永远面对着车, ...

  3. UVALive 6277 - Addictive Bubbles (模拟)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  4. 边缘计算 ai_什么是边缘AI计算?

    边缘计算 ai Edge AI starts with edge computing. Also called edge processing, edge computing is a network ...

  5. UVALive 6093 Emergency Room --优先队列实现的模拟

    题意:给n个医生,这些医生有一个上班时间,然后给一些病人,病人有一个到达的时间,以及一些诊断,诊断有property(优先级)和duration(诊断时间)这两个属性,每个病人可能要诊断多次,最后问每 ...

  6. UVALive - 7511 Multiplication Table(暴力+模拟)

    题目链接:点击查看 题目大意:给出一个二维矩阵表示无限大的乘法表,每个位置的值都等于 i * j ,现在给出一个 n * m 的矩阵,现在需要判断该矩阵是否为乘法表的一个子矩阵 题目分析:训练时以为是 ...

  7. UVALive 6257 Chemist's vows --一道题的三种解法(模拟,DFS,DP)

    题意:给一个元素周期表的元素符号(114种),再给一个串,问这个串能否有这些元素符号组成(全为小写). 解法1:动态规划 定义:dp[i]表示到 i 这个字符为止,能否有元素周期表里的符号构成. 则有 ...

  8. UVALive 7324 ASCII Addition (模拟)

    ASCII Addition 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/A Description Nowadays, th ...

  9. UVALive - 6440(模拟)

    题目链接:https://vjudge.net/contest/241341#problem/G 题目大意:输入一个N,n次操作.对于第一种操作增加一个病人,告诉病人的t0,st0,r.第二种操作,在 ...

最新文章

  1. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条
  2. PyTorch cat
  3. python简单编程例子-Python实现的简单万年历例子分享
  4. cisco路由交换防火墙命令配置详解
  5. 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?
  6. 使用cisco 2500路由器实现ADSL接入
  7. OPC DA通讯 KEP6.4 DCOM 配置脚本
  8. scala定义函数(六)
  9. java 8 map reduce_java8之Lambda表达式 4:MapReduce开发案例
  10. c++ 输出格式控制
  11. linux源代码阅读笔记 高速缓冲区管理
  12. ISO27001风险评估实施流程(详细版)
  13. 实用:Google Chrome(谷歌浏览器)键盘快捷键大全
  14. Java面试题(140多道高频面试题2022版)
  15. wacom怎么调压感_要怎么设置PS的画笔 才能充分利用到数位板压感?
  16. GET POST 区别!别听他们扯犊子,越看越气人
  17. Firefox火狐浏览器打开页面链接的方式的设置
  18. Hive纵向表转横向表
  19. webmatrix3 php,webmatrix
  20. 成都大数据培训之SpringBoot中关于JDBC的方式运用

热门文章

  1. IOU, GIOU, DIOU, CIOU
  2. 华为路由器console口加密 telnet远程登录 DHCP server在路由器中的两种写法
  3. 这些学校招收!!!应用统计学专硕(025200),你知道吗?
  4. cnn keras 实现_在iOS应用中实现Keras CNN
  5. session在html页面跳转,session跨页面传值为空
  6. 一花独放不是春,华为与用友共同构建百花齐放生态
  7. 使用python批量将word转为pdf
  8. 中国 省级 单位 的 字母 简称 和 字母 排列 顺序
  9. java学籍管理系统课设报告,java课程设计学籍管理系统.doc
  10. 曾轶可16首原创歌词 小生整理完整版