您的位置:首页 > Web前端

CodeForces-876B Divisiblity of Differences

2017-11-26 17:47 141 查看

CodeForces-876B Divisiblity of Differences

标签:水题

题目链接

/*
题意:给n个数,选k个,要求在k里面任选2个数都能被m整除。
注意n里面可以有相同的数。
思路:对每个数initial[i],保存initial[i]%m在mod[i]。
找出现次数(ans)最多的那个余数,若ans >= k,有解;否组无解。见代码。
*/
#include <stdio.h>
#include <algorithm>
using namespace std;

const int maxn = 100005;
int initial[maxn], mod[maxn];

int main()
{
int n, k, m;

while(scanf("%d %d %d", &n, &k, &m) != EOF)
{
for(int i = 0; i < n; i++)
{
scanf("%d", &initial[i]);
mod[i] = initial[i] % m;  //
}

sort(mod, mod + n);  //找出现次数(ans)最多的那个余数
int temp = mod[0], total = 0, ans = 0, flag;

for(int i = 0; i < n; i++)
{
if(temp == mod[i])  total++;
else
{
temp = mod[i];
total = 1;  //total = 1
}
if(total > ans)
{
ans = total;
flag = temp;
}
}

if(ans >= k)  //输出
{
printf("Yes\n");
int time = 0;

for(int i = 0; i < n; i++)
{
if(initial[i] % m == flag && time < k)  //time < k, 选k个数
{
printf("%d ", initial[i]);
time++;
}
}
printf("\n");
}
else  printf("No\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言