Problem A
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 106 Accepted Submission(s) : 34
As a good tuner, DreamGrid can choose an integer $K$ (can be positive, 0, or negative) as his tune and add $K$ to every element in $D$. Can you help him maximize his score by choosing a proper tune?
Input
There are multiple test cases. The first line of the input contains an integer $T$ (about 100), indicating the number of test cases. For each test case:
The first line contains one integer $n$ ($1 le n le 10^5$), indicating the length of the sequences $D$ and $S$.
The second line contains $n$ integers $D_1, D_2, dots, D_n$ ($-10^5 le D_i le 10^5$), indicating the song performed by DreamGrid.
The third line contains $n$ integers $S_1, S_2, dots, S_n$ ($-10^5 le S_i le 10^5$), indicating the standard version of the song.
It's guaranteed that at most 5 test cases have $n > 100$.
Output
For each test case output one line containing one integer, indicating the maximum possible score.
Sample Input
2 4 1 2 3 4 2 3 4 6 5 -5 -4 -3 -2 -1 5 4 3 2 1
Sample Output
3 1
Hint
For the first sample test case, DreamGrid can choose $K = 1$ and changes $D$ to ${2,3,4,5}$.
For the second sample test case, no matter which $K$ DreamGrid chooses, he can only get at most 1 match.
第一个数列各个位上的数字加上一个k可以得到第二个数列
问最多有多少个数可以通过加上数字k等于第二个数列
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> #include <map> using namespace std ; #define maxn 1100000 int num1[maxn] , num2[maxn] , num[maxn] ; int t ; int n ; map<int,int> mp ; // 数据太多而且不方便枚举 数字 k 所以使用map int main(){ cin >> t ; while(t--){ cin >> n ; mp.clear() ; for(int i=1 ; i<=n ; i++){ cin >> num1[i] ; } for(int i=1 ; i<=n ; i++){ cin >> num2[i] ; } for(int i=1 ; i<=n ; i++){ mp[num1[i]-num2[i]] ++ ; } int result = 0 ; // 遍历map for(map<int,int>::iterator item = mp.begin();item!=mp.end() ;item++){ if(item->second > result){ result = item->second ; } } cout << result << endl ; } return 0 ; }