电话聊天狂人

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

输入格式:
输入首先给出正整数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;
}
目录
相关文章
|
2月前
手机网页打电话
手机网页打电话
19 1
刷题之单生狗和电话聊天狂人
刷题之单生狗和电话聊天狂人
78 0
(字符串hash)(map)电话聊天狂人
(字符串hash)(map)电话聊天狂人
54 0
|
机器人
话痨小机器人快陪我聊天
话痨小机器人快陪我聊天
101 0
话痨小机器人快陪我聊天
|
小程序 程序员 开发者
|
定位技术 Python
元旦C位出道,用微信好友头像拼个中国地图吧!
准备用好友头像拼接成背景图,用中间透明的中国地图加以覆盖,即可生成一个酷炫的照片地图。
1466 0
元旦C位出道,用微信好友头像拼个中国地图吧!
|
程序员 数据库 Docker
中秋节,你有一封嫦娥发来的密报
明月初上,思念绵长,中秋节也有属于程序员的浪漫~
173 0
中秋节,你有一封嫦娥发来的密报
1分钟掌握和女生约会的聊天方式
初次约会中最重要的一环是什么?不是你带妹子去了哪家高档餐厅、也不是你对妹子有多好,而是聊天。
1222 0
|
SQL 算法 Java
百度电话一面
自我介绍 聊项目相关 聊聊基础 stringbuffer,stringbuilder区别 jvm内存模型 GC算法,项目中实现的GC算法??(不会实现) 聊聊java的锁synchronize和lock,说说读写锁 说说spring的重要特性(ioc)...
1104 0