Write a program to determine whether n/2 distintinctive pairs can be formed from given n integers where n is even and each pair's sum is divisible by given k. Numbers cannot be repeated in the pairs, that means only you can form total n/2 pairs.
#include <cstdio>
#include <cassert>
#include <cstdlib>
#include <string.h> // for memset,一般用于字符型变量
bool CheckPairable(int a[], int len, int k)
{
assert(len % 2 == 0);
int i,j;
int cnts[k];
memset(cnts, 0, sizeof(int)*k);
for (i = 0; i < len; i++)
cnts[a[i] % k]++;
if (cnts[0] % 2 != 0)
return false;
if (k % 2 == 0)
if (cnts[k/2] % 2 != 0)
return false;
for (i = 1,j = k-1; i < j; i++,j--)
if (cnts[i] != cnts[j])
return false;
return true;
}
int main()
{
int a[] = {1, 4, 5, 10, 2, 3, 6, 4};
int len = sizeof(a) / sizeof(a[0]);
if (CheckPairable(a, len, 5))
printf("YES\n");
else
printf("NO\n");
return 0;
}