电话聊天狂人

简介: 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。

输入格式:
输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。

输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。

输入样例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:

13588625832 3
#include<bits/stdc++.h>
#include<string>
#include<map> 
using namespace std;
map<string,int>p;
struct nu
{
    string num;//存电话号码
    int cnt;
}ang[1000010];
bool cmp_cnt(nu x,nu y)
{
    return x.cnt>y.cnt;//按照打电话次数排序
}
bool cmp_num(nu x,nu y)
{
    return x.num<y.num;//按照电话号码的大小排序
}
int main()
{
    string str,ch;
    int n,k=0,amax=0,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        cin>>str>>ch;//输入两串电话号码
        if(p[str]==0)
        ang[k++].num=str;
                            //分别存入
        if(p[ch]==0)
        ang[k++].num=ch;
        
        p[str]++;//用map记录通话次数
        p[ch]++;
    }
    for(i=0;i<k;i++)
    {
        ang[i].cnt=p[ang[i].num];//提取通话次数
    }
    sort(ang,ang+k,cmp_cnt);
    amax=ang[0].cnt;
    int t=1;
    for(i=1;;i++)//寻找并列
    {
        if(amax==ang[i].cnt)
        t++;
        else
        break;
    }
    sort(ang,ang+t,cmp_num);
    
    cout<<ang[0].num<<" "<<ang[0].cnt;
    if(t>1)
    cout<<" "<<t;
    return 0;
}
目录
相关文章
|
5月前
手机网页打电话
手机网页打电话
162 1
刷题之单生狗和电话聊天狂人
刷题之单生狗和电话聊天狂人
94 0
(字符串hash)(map)电话聊天狂人
(字符串hash)(map)电话聊天狂人
70 0
|
机器人
话痨小机器人快陪我聊天
话痨小机器人快陪我聊天
120 0
话痨小机器人快陪我聊天
|
小程序 程序员 开发者
1分钟掌握和女生约会的聊天方式
初次约会中最重要的一环是什么?不是你带妹子去了哪家高档餐厅、也不是你对妹子有多好,而是聊天。
1237 0
|
SQL 算法 Java
百度电话一面
自我介绍 聊项目相关 聊聊基础 stringbuffer,stringbuilder区别 jvm内存模型 GC算法,项目中实现的GC算法??(不会实现) 聊聊java的锁synchronize和lock,说说读写锁 说说spring的重要特性(ioc)...
1114 0
下一篇
无影云桌面