7-14 电话聊天狂人

Posted 我只有一件白T恤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-14 电话聊天狂人相关的知识,希望对你有一定的参考价值。

7-14 电话聊天狂人(25 分)

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

输入格式:

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

输出格式:

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

输入样例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:

13588625832 3
思路:使用结构体数组来存取,每次输入查找数组中是否存在,不存在则插入,否则个数加一,但是当N最大且随机时,运行超时。
明天改成vector试试。
技术分享图片
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct Node{
    long long numb;
    int n;
}a[200005];
bool cmp(Node a, Node b)
{
    return a.n > b.n;
}
int main()
{
    int n, sum = 0; cin >> n;
    for (int i = 0; i < n; i++)
    {
        long long numb1, numb2; 
        cin >> numb1 >> numb2;
        int flag = 1;
        for (int i = 0; i < sum;i++)
        if (a[i].numb == numb1){
            a[i].n++; flag = 0; break;
        }
        if (flag){
            a[sum].numb = numb1;
            a[sum].n = 1; sum++;
        }

        flag = 1;
        for (int i = 0; i < sum; i++)
        if (a[i].numb == numb2){
            a[i].n++; flag = 0; break;
        }
        if (flag){
            a[sum].numb = numb2;
            a[sum].n = 1; sum++;
        }
    }
    sort(a, a + sum, cmp);
    int flag = 1; long long min = a[0].numb;
    for (int i = 1; i < sum; i++)
    {
        if (a[i].n != a[0].n)break;
        flag++;
        if (a[i].numb < min)min = a[i].numb;
    }
        if (flag == 1)cout << a[0].numb << " " << a[0].n << endl;
        else cout << min << " " << a[0].n << " " << flag << endl;
    return 0;
}
暴力未AC代码

 http://blog.csdn.net/duan19920101/article/details/50617190/






以上是关于7-14 电话聊天狂人的主要内容,如果未能解决你的问题,请参考以下文章

电话聊天狂人

5-14 电话聊天狂人 (25分)

7-113 电话聊天狂人 (25分)

11-散列1 电话聊天狂人 (25 分)

PTA 5-14 电话聊天狂人 (25分)

基础实验5-2.2 电话聊天狂人 (25分)-散列表