“异或”的求助
关于大佬们的题解:部分代码如下
while (n--)
{
scanf("%lf",&a);//out f
scanf("%d",&t);
for (int i=1;i<=t;i++)
{
int x=(int)floor(a*i);
ans^=x; //这里我不理解???
}
}
这里是大佬题解里的代码。对于这段代码,下面的这句话怎么理解?
既然x是不断变化的,那么为什么ans^=x;的最终值就是要求的结果呢?
因此我们只需要设ans=0 然后把所有的数异或一遍。因为只有一盏灯是开的,也就是说,其他编号出现的次数都是成对的,异或完都是0,剩下的那一个与0异或得它本身。因此最后ans就是结果。