标签:tmp str include size com highlight cpp names ber
发现值域很小,而且怎么异或都不会超过1023……然后可以使用类似基数排序的思想,每次扫一遍就行了。
复杂度O(k*1024)。
#include<cstdio> #include<cstring> using namespace std; int n,k,x,cnts[1110],tmpcnts[1110]; int main() { // freopen("c.in","r",stdin); int X; scanf("%d%d%d",&n,&k,&x); for(int i=1;i<=n;++i) { scanf("%d",&X); ++cnts[X]; } for(int i=1;i<=k;++i) { memset(tmpcnts,0,sizeof(tmpcnts)); int now=0; for(int j=0;j<=1023;++j) { int t=cnts[j]; if(now%2==0) { cnts[j]/=2; tmpcnts[j^x]+=(t-cnts[j]); } else { cnts[j]=(cnts[j]+1)/2; tmpcnts[j^x]+=(t-cnts[j]); } now+=t; } for(int j=0;j<=1023;++j) cnts[j]+=tmpcnts[j]; } for(int i=1023;i>=0;--i) if(cnts[i]) { printf("%d ",i); break; } for(int i=0;i<=1023;++i) if(cnts[i]) { printf("%d\n",i); break; } return 0; }
标签:tmp str include size com highlight cpp names ber
原文地址:http://www.cnblogs.com/autsky-jadek/p/6423632.html