链接:
https://codeforces.com/problemset/problem/1497/B
题意:
给n个数,我们可以把这n个数分成几组,但要满足一下要求,每一组相邻两个数相加可以被m整除,或只有一个数。问可以分成的最小组数
本题只要记录每个数除m后的余数,然后依据余数进行分组即可。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
using namespace std;
typedef long long ll;
int num[100003];
ll mod = 1e9 + 7;
int main() {
int T;
cin >> T;
while (T--) {
memset(num, 0, sizeof(num));
int n, m;
cin >> n >> m;
int x;
int sum = 0;
for (int i = 1; i <= n; i++) {
cin >> x;
num[x % m]++;
}
if (num[0]) {
sum++;
}
for (int i = 1; i <= m / 2; i++) {
if (num[i] != 0 && num[i] == num[m - i]) {
sum++;
}
else {
sum += abs(num[i] - num[m - i]);
}
}
cout << sum;
cout << endl;
}
return 0;
}