这题如果采取普通做法,完全行不通。原因是测试的数据组大,且数据组所含有的数据元素大。
这里直接借鉴网上的代码 :
暴力解法:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node{
long long numb; //类似map集合中的key;
int n; //类似map集合中的value;
}a[100001];
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; //a数组中有与输入相同的电话号码
for (int i = 0; i < sum;i++)
if (a[i].numb == numb1){ //如果a数组中存在与num1相同电话,则此电话对应的vlue+1;
a[i].n++;
flag = 0; //a数组中无与输入相同的电话号码
break;
}
if (flag){ //如果a数组中不存在与num1相同电话,则把num1作为a数组中