2017.2.09【初中部 GDKOI】模拟赛B组 昵称 题解
2017-02-10 07:57
267 查看
原题:
http://172.16.0.132/senior/#contest/show/1916/1题目描述:
ZSUQ Messenger是一款跟腾讯QQ类似的软件。该软件的每个注册用户都拥有一个昵称以标识其身份。由于用户数很多,因此一个昵称可能会被许多不同的用户使用到,例如“Tom”,“Marry”,“Kate”等一些常用名会被频繁使用到。不过ZSUQ公司通过最近的一项调查发现,并没有超过5000个不同的昵称被用户使用到。 作为ZSUQ公司的一个员工,公司将提供给你一份所有用户的昵称名单,并要求你提交一份报告,告诉大家对于每个昵称都有多少用户在使用。输入:
数据第一行是一个整数N,(1<=N<=100,000),下面N行给出这N个用户的昵称名。每一个昵称名用一个不超过100个字符的字母字符串表示。注意昵称名称对大小写不敏感。输出:
输出要给出你对昵称用户的统计。按字符串顺序输出每个昵称,并输出该昵称有多少个用户在使用,中间用一个空格隔开。注意一行的首尾不要有多余空格,所有的昵称名均转换为小写字符输出。样例输入:
4Carp
infish
peipei
carp
样例输出:
carp 2infish 1
peipei 1
分析:
首先对字符串数组排序(从小到大),然后(扫一遍统计输出 或 用字典树统计输出)实现:
var n,i,j,bz:longint; s:array[0..100007]of string; procedure kp(x,y:longint); var i,j:longint; mid:string; begin i:=x; j:=y; mid:=s[x]; repeat while s[j]>mid do dec(j); while s[i]<mid do inc(i); if i<=j then begin s[0]:=s[i]; s[i]:=s[j]; s[j]:=s[0]; inc(i); dec(j); end; until i>j; if x<j then kp(x,j); if i<y then kp(i,y); end; begin readln(n); for i:=1 to n do begin readln(s[i]); for j:=1 to length(s[i]) do if s[i,j] in ['A'..'Z'] then s[i,j]:=chr(ord(s[i,j])+32); end; kp(1,n); i:=0; while i<n do begin inc(i); write(s[i],' '); bz:=1; while s[i]=s[i+1] do begin inc(i); inc(bz); end; if i<>n then writeln(bz,' ') else writeln(bz); end; end.
相关文章推荐
- 2017.2.09【初中部 GDKOI】模拟赛B组 最难的问题 题解
- 2017.2.09【初中部 GDKOI】模拟赛B组 拦截导弹 题解
- 2017.2.09【初中部 提高组】模拟赛C组 石子游戏 题解
- 2017.1.14【初中部 GDKOI】模拟赛B组 心灵终结 题解
- 2017.2.10【初中部 GDKOI】模拟赛B组题解
- 2017.1.19【初中部 GDKOI】模拟赛B组 开灯 题解
- 2017.2.11【初中部 GDKOI】模拟赛B组题解
- 2017.2.09【初中部 GDKOI】模拟赛B组
- 2017.2.11【初中部 GDKOI】模拟赛B组 摧毁巴士站(bus) 题解
- 2017.1.17【初中部 GDKOI】模拟赛B组 穿越泥地 题解
- 2017.2.09【初中部 GDKOI】模拟赛B组 格斗俱乐部 题解
- 2017.1.17【初中部 GDKOI】模拟赛B组 修建道路 题解
- 2017.2.10【初中部 GDKOI】模拟赛B组 方格游戏(game) 题解
- 2017.1.14【初中部 GDKOI】模拟赛B组 Mooo Moo 题解
- 2017.2.10【初中部 GDKOI】模拟赛B组 运算符(calc) 题解
- 2017.1.14【初中部 GDKOI】模拟赛B组 Mooo Moo 题解
- 2017.2.11【初中部 GDKOI】模拟赛B组
- 2017.2.12【初中部 GDKOI】模拟赛B组 T2:宿敌
- 2017.1.17【初中部 GDKOI】模拟赛B组 队列变换 题解