给定N个整数,N为偶数,是否能浙大N/2对,使得每对和能被k整除。注意:每个元素只能出现在一个配对中。
方法:统计各个数modK之后的结果,对余数是0和k/2的情况进行特殊处理
#include <iostream>
#include <unordered_map>
#include <cstring>
using namespace std;
bool match(int A[], int n, int k)
{
int hsh[k];
memset(hsh, 0, sizeof(hsh));
for(int i=0; i<n; ++i)
hsh[A[i]%k]++;
// cout<<hsh[k/2]%2<<endl;
if(hsh[0]%2!=0) { return false;}
if(k%2==0){
if(hsh[k/2]%2!=0) return false;
}
for(int i=1; i<=k/2; ++i)
{
if(hsh[i]!=hsh[k-i]) return false;
}
return true;
}
int main()
{
int A[]={1,2,3,4,5,6};
cout<<match(A,6,7)<<endl;
return 0;
}