http://codeforces.com/problemset/problem/876/B
给出一串数,找出k个数,这k个数之间两两相减的差必须都要对m取余为0。
关键点就是,这样的k个数每个对m取余的结果都相同,根据这个点就好做了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k,m;
while(cin>>n>>k>>m)
{
int nu[111111];
int a[111111];
int i;
memset(nu,0,sizeof(nu));
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
nu[a[i]%m]++;
}
int s;
int ma=-1;
for(i=0;i<m;i++)
{
if(nu[i]>ma)
{
ma=nu[i];
s=i;
}
}
int js=0;
int q=0;
if(ma<k){
cout<<"No"<<endl;
continue;
}cout<<"Yes"<<endl;
for(i=0;i<n;i++)
{
if(js==k)break;
if(a[i]%m==s)
{
if(q++)cout<<" ";
cout<<a[i];
js++;
}
}
cout<<endl;
}
return 0;
}