[ZOJ 4025] King of Karaoke
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5766
求两个序列的相对元素的差出现次数最多的,最低出现一次。
AC代码 1 :
//用数组先把所有值都读入,再进行判断
//Run Time(ms): 170
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100005;
int test;
int n;
int d[maxn],s[maxn],p[maxn];
int main()
{
ios::sync_with_stdio(false);
cin>>test;
while(test--)
{
cin>>n;
for(int i = 0;i < n;i++) cin>>d[i];
for(int i = 0;i < n;i++)
{
cin>>s[i];
p[i] = s[i] - d[i];
}
sort(p,p+n);
int ans=1;
int cnt=1;
for(int i = 0;i < n-1;i++)
{
if(p[i] == p[i+1])
cnt++;
else
cnt=1;
if(cnt > ans)
ans = cnt;
}
cout<<ans<<endl;
}
return 0;
}
AC代码 2 :
//先用一个数组存储第一个序列,第二个序列边输入边计算
// Run Time(ms) : 250
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
const int maxn = 100005;
int test;
int n;
int d[maxn];
int x;
int main()
{
ios::sync_with_stdio(false);
cin>>test;
while(test--)
{
cin>>n;
for(int i = 0;i < n;i++) cin>>d[i];
map<int,int> mp;
int ans = 1;
for(int i = 0;i < n;i++)
{
cin>>x;
mp[d[i]-x]++;
if(mp[d[i]-x] > ans)
ans=mp[d[i]-x];
}
cout<<ans<<endl;
}
return 0;
}