题目链接:http://codeforces.com/contest/876/problem/B
题意:给你一个长度为n的序列,让你从这n个数里面,选k个数出来,这k个数中任意两个数的差,模m等于零
解析:其实一开始没思路的,后面发现如果两个数%一个数的结果是一样的,那么相减后的结果%这个数就等于零了,那么我直接处理处每个数%m的结果,加到一个vector里,然后去判断有没有一个vector的size大于k即可
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
map<int,int>maple;
vector<int>ans;
vector<int>tmp[maxn];
int a[maxn];
int main(void)
{
int n,k,m,ma = 0;
scanf("%d %d %d",&n,&k,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
maple[a[i]]++;
ma = max(ma,a[i]);
}
int flag = 0;
for(int i=0;i<n;i++)
tmp[a[i]%m].push_back(a[i]);
for(int i=0;i<m;i++)
{
if((int)tmp[i].size()>=k)
{
ans = tmp[i];
flag = 1;
break;
}
}
if(!flag)
puts("No");
else
{
puts("Yes");
for(int i=0;i<k;i++)
{
if(i)printf(" ");
printf("%d",ans[i]);
}
puts("");
}
return 0;
}