Нужна помощь с этой проблемой программирования, связанной с подбрасыванием монет - PullRequest
1 голос
/ 22 августа 2010

Я пытаюсь решить проблему подбрасывания монет на codechef.com (http://www.codechef.com/problems/FLIPCOIN/) Мой код написан на C, и я протестировал его с помощью gcc v4.4.3 на моей машине под управлением Linux, и моя программа работает с предоставленным примером ввода. Однако при загрузке в судью я получаю сообщение «Неправильный ответ». В моей программе я представляю подбрасывание монет переключением битов. Я думаю, что мой алгоритм правильный, и я не могу придумать случай, когда он потерпит неудачу. Ниже мой код. Любая помощь будет очень признательна.

Спасибо.

#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;

}

Ответы [ 2 ]

6 голосов
/ 22 августа 2010

Поскольку вы используете битовую последовательность, хранящуюся в long int, для представления монет, ваш код не будет работать с более чем 32 монетами (или сколь угодно много битов в long). На сайте указано, что может быть до 100000 монет.

0 голосов
/ 22 августа 2010

Вероятно, существует проблема с методом CodeChef для проверки результатов, так как я получил тот же ответ. Нет проблем с вашим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...