看到这个题目就想到要用暴搜
但是n,m,k<=100000;
所以肯定不是
经过一番痛苦的思考
终于发现了一个惊天大秘密
如果a[i]%m==a[j]%m
则(a[i]-a[j])%m==0;
所以a[i],a[j]就可以放在一组;
哈哈哈哈哈,此题破矣;
标程如下:
#include<bits/stdc++.h> using namespace std; long long n,k,m,a[100010],b[100010],q=100010,sum=0; int main() { freopen("rollover.in","r",stdin); freopen("rollover.out","w",stdout); cin>>n>>k>>m; for(int i=1;i<=n;i++) { cin>>a[i]; b[a[i]%m]+=1; } for(int i=0;i<m;i++) { if(b[i]>=k) { cout<<"Yes"<<endl; q=i; break; } } if(q==100010) { cout<<"No"; return 0; } for(int i=1;i<=n;i++) { if(a[i]%m==q) { if(sum<k) { cout<<a[i]<<" "; sum+=1; } else break; } }