本学校高一同学又迎来了一次考试。
本蒟蒻身为验题人,自然要写一个题解来帮助大家(骗访问量)啦。
T1:
显然满足条件的数mod m相同,这样我们开m个vector把mod m相同的数放进同一个vector里。能否有解判断size即可。
答案要求字典序最小,我们比较这些vector的第一个元素(最小的),显然它们两两不可能相同,所以判断它们的大小即可比较字典序。
(话说这题后70分数据是我造的,前面30分队长说有两个"No",某人排序反了只有20,说明我还把他WA了,嗯,没出锅)
代码:
1 #include<bits/stdc++.h> 2 const int maxe=1e6+1e2; 3 4 std::vector<int> v[maxe]; 5 6 int main() { 7 static int n,m,k,t,sel=-1; 8 scanf("%d%d%d",&n,&k,&m) , assert(m&&m<=1e6); 9 while(n--) scanf("%d",&t) , v[t%m].push_back(t); 10 for(int i=0;i<m;i++) { 11 if( v[i].size() ) std::sort(v[i].begin(),v[i].end() ); 12 if( (signed) v[i].size() >= k && ( !~sel || *v[sel].begin() > *v[i].begin() ) ) sel = i; 13 } 14 if( !~sel ) return puts("No"),0; 15 puts("Yes"); 16 for(int i=0;i<k;i++) printf("%d%c",v[sel][i],i!=k-1?' ':'\n'); 17 return 0; 18 }