题目链接:https://www.luogu.org/problem/T84891
题目
T1思路
如果零件A与零件B冲突,且零件A与零件C冲突,那么零件B与零件C也是冲突的。
也就是说在零件A、零件B、零件C中,我们只能选出其中一个零件。
而零件A 、零件B、零件C有一个共同的特征,那就是%K后为同一值。
所以只要把所有输入内容%K后塞入一个set,最后输出这个set的大小就可以了。
代码
#include <cstdio>
#include <algorithm>
#include <bitset>
#include <cmath>
#include <set>
using namespace std;
const int MAXN = 1e5 + 100;
int arr[MAXN];
bitset<MAXN> vis;
int main() {
vis.reset();
int n, k;
scanf("%d %d", &n, &k);
for(int i = 0; i < n; i++)
scanf("%d", &arr[i]);
//按照惯例,暴力做法注释
// sort(arr, arr + n);
// for(int i = 0; i < n; i++) {
// for(int j = i + 1; j < n; j++) {
// if(!vis[j]) {
// if((arr[j] - arr[i]) % k == 0)
// vis[j] = true;
// }
// }
// }
set<int> s;
for(int i = 0; i < n; i++)
s.insert(arr[i] % k);
// printf("%d\n", n - vis.count());
printf("%d\n", s.size());
return 0;
}