2017.2.09【初中部 GDKOI】模拟赛B组 昵称 题解

本文介绍了一个用于统计重复昵称数量的算法,适用于处理大量用户数据的情况。通过排序和遍历字符串数组来高效统计每个昵称的出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题:

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个字符的字母字符串表示。注意昵称名称对大小写不敏感。

输出:

输出要给出你对昵称用户的统计。按字符串顺序输出每个昵称,并输出该昵称有多少个用户在使用,中间用一个空格隔开。注意一行的首尾不要有多余空格,所有的昵称名均转换为小写字符输出。

样例输入:

4
Carp
infish
peipei
carp

样例输出:

carp 2
infish 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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值