http://codeforces.com/contest/876/problem/B
题意:给你n个数字,要求在其中选出k个数字,要求这k个数字两两之差能被m整除。
题解:这题被hack+大数据不过,好菜啊。每个数对m取余得到x,记录这个x出现的次数,大于k则存在,输出k个a[i]%m==x的a[i]即可。
题意:给你n个数字,要求在其中选出k个数字,要求这k个数字两两之差能被m整除。
题解:这题被hack+大数据不过,好菜啊。每个数对m取余得到x,记录这个x出现的次数,大于k则存在,输出k个a[i]%m==x的a[i]即可。
代码:
#include<bits/stdc++.h>
#define debug cout<<"aaa"<<endl
#define d(a) cout<<a<<endl
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define MIN_INT (-2147483647-1)
#define MAX_INT 2147483647
#define MAX_LL 9223372036854775807i64
#define MIN_LL (-9223372036854775807i64-1)
using namespace std;
const int N = 100000 + 5;
const int mod = 1000000000 + 7;
const double eps = 1e-8;
map<int,int> mp;
int a[N];
int main(){
int n,k,m,ans=-1,cnt=1;
cin>>n>>k>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]%m]++;
if(mp[a[i]%m]>=k&&ans==-1){
ans=a[i]%m;
}
}
if(ans==-1){
cout<<"No"<<endl;
return 0;
}
cout<<"Yes"<<endl;
for(int i=1;i<=n&&cnt<=k;i++){
if(a[i]%m==ans){
cnt++;
cout<<a[i]<<" ";
}
}
return 0;
}