[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;
}
原文地址:https://www.cnblogs.com/youpeng/p/10799964.html