数组的相似度
题目描述
给定一个长度为n的数组A: a1, a2, …, an和长度为n的数组B: b1, b2, …, bn,选取一个整数K(K可能为正数,可能为负数,也可能为0),把K加到数组A的每个元素上,然后计算ai与bi相等的个数Num,1<=i<=n。数组A和数组B的相似度定义为Num的最大值。
输入格式
第一行为一个正整数T,表示有T个测试例子(1<=T<=100)。
对于每个测试例子:
第一行为正整数n(1<=n<=100),表示数组A和数组B的长度。
第二行为n个以空格相隔的整数,值范围为[-10000, 10000],表示数组A。
第三行为n个以空格相隔的整数,值范围为[-10000, 10000],表示数组B。
输出格式
对于每个测试例子,输出一行整数,表示数组A和数组B的相似度。
样例输入
2
4
0 1 2 3
2 3 4 6
5
-5 -4 -3 -2 -1
7 6 5 4 3
样例输出
3
1
提示/说明
对于第一个样例,取K=2,数组A变为{2, 3, 4, 5},所以和数组B的相似度为3。
对于第二个样例,无论K取什么值,数组A和数组B对应位置最多有一个元素相同,所以它们相似度为1。
思路:
这题注意看提示第二行,对应位置,所以是个easy题,只要记录第二个数列-第一个对应位置数列元素的次数即可,输出最多的元素即可。
#include<bits/stdc++.h>
using namespace std;
#define NN 10000
int a[105],b[105];
bool cmp(int a,int b){
if(a>b) return true;
else return false;
}
main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int c[50000]={0};
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
for(int i=0;i<n;i++){
c[a[i]-b[i]+2*NN]++;
}
int ans_index=max_element(c,c+50000)-c;
//sort(c,c+4*NN,cmp);
cout<<c[ans_index]<<endl;
}
}