现充|junyu33

题解 P3949 【答案错误】

手动模拟即可得到后一半是经过前一半反转得到的。又看到是2的n次方,于是灵机一动,转换成二进制,思路呼之欲出:

只需要把分值x减去1,转化成二进制,统计1的个数,再判断奇偶性即可。

这里科普一下,在体育比赛(二人竞技)时,先发球跟后发球会带来一定的心理影响,为了尽量削弱这种发球先后带来的影响,无聊的数学家们就想出了这种顺序:(0表示甲方发球,1表示乙方发球)

0 1

0 1 1 0

0 1 1 0 1 0 0 1

0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0

...

这可以当作对这种分配方法的感性理解吧。

这里只贴出核心代码,快读、long long这些自己加。

int main(){
   n=read(),q=read();
   while(q--){
      int a=read()-1,cnt=0;
      for(int i=n;~i;i--)
         if(a>=2的i次幂) cnt++,a-=2的i次幂;
      if(cnt%2) printf("Z\n");
      else printf("X\n");
   }
   return 0;
}