浙江工商大学22加试(oj复试)数组的相似度

数组的相似度

题目描述
给定一个长度为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;
	 }
 }
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值