开始想法是直接用string存储,都能通过,但最长的测试点是180ms+,后来发现可以直接改用int int型,最长的测试点时间只有80ms+。这里必须用map不能开数组,否则会因过大内存超限。
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
map<string, int> mp;
int main()
{
int m, n;
string temp;
cin >> m >> n;
int max = m * n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> temp;
mp[temp]++;
if (mp[temp] >= 0.5*max)
{
cout << temp << endl;
break;
}
}
}
return 0;
}
改进的方法:
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
map<int, int>mp;
int main()
{
int m, n;
int temp;
scanf("%d%d", &m, &n);
int max = m * n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &temp);
mp[temp]++;
if (mp[temp] >= 0.5*max)
{
cout << temp << endl;
break;
}
}
}
return 0;
}