题目:点击打开链接
题意:从n个数中找到k个数,满足任意两者的差能够除尽m。
思路:设两个数a、b,若(a - b)% m = 0,则a可写成k1*m + c,b可写成k2*m + c,所以根据对m取余的结果把n个数分类即可。
// Code Forces 876B Divisiblity of Differences 运行/限制:61ms/1000ms
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
vector<int> v[100005];
int main(){
int n, k, m, num, flag;
while (scanf("%d%d%d", &n, &k, &m) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%d", &num);
v[num % m].push_back(num);
}
flag = 1;
for (int j = 0; j < m && flag; j++) {
if (v[j].size() >= k) {
flag = 0;
printf("Yes\n");
for (int t = 0; t < k; t++) {
printf("%d%c", v[j][t], t == k - 1 ? '\n' : ' ');
}
}
}
if (flag) printf("No\n");
for (int j = 0; j < m; j++) {
v[j].clear();
}
}
return 0;
}