我试图解决codechef.com上的翻转硬币问题(http://www.codechef.com/problems/FLIPCOIN/)我的代码在C中,我在运行Linux的机器上使用gcc v4.4.3进行了测试,我的程序适用于提供的示例输入.但是,在上传到法官时,我收到"错误答案"的消息.在我的程序中,我代表通过切换位来翻转硬币.我认为我的算法是正确的,并且我无法想出它会失败的情况.以下是我的代码.任何帮助将非常感激.
谢谢.
#include <stdio.h>
long int n=0,temp,number_of_coins,number_of_inputs,bit_mask;
long int number_of_ones(long int i) //Return the number of bits set
{
return __builtin_popcountl(i);
}
int main(void)
{
long int ctr,lower,upper,length;
int op;
scanf("%ld %ld",&number_of_coins,&number_of_inputs);
length = number_of_coins-1;
for(ctr = 0 ; ctr < number_of_inputs;ctr++) //Main loop
{
scanf("%d %ld %ld",&op,&lower,&upper);
bit_mask = ((1 << length-lower+1)-1) & ~((1 << length-upper)-1);
if(op == 0)
{
n ^= bit_mask ; //Toggle the bits in the range lower to upper
}
else
{
temp = n;
temp &= bit_mask;
printf("%ld\n",number_of_ones(temp)); //Print number of bits set
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)