hdu 4768 Flyer (异或操作的应用)

2013年长春网络赛1010题

继巴斯博弈(30分钟)签到后,有一道必过题(一眼即有思路)。

思路老早就有(40分钟):倒是直到3小时后才被A掉。期间各种换代码姿态!

 

共享思路:

  unlucky student flag 如果存在,有且只有one。flyers为基数;

  其他student 为偶数。很容易想到以前做过的一道异或题。

过程:

 (1)通过异或找unlucky。

 (2)如果找到,再通过分发 flyers的规律取余操作确定 flyers的个数;

由于第二个条件出现了bug,但确信思路比对;所以各种换姿势,Wrang到想死,又各种找tricks。

(期间自然也有在线管理员的ansers的误导)。直到最后让队友完全了解思路才找到bug,然后A掉。

#include<stdio.h>

int main()

{

    int i,n;

    while(scanf("%d",&n)!=EOF)

    {

        __int64 ans=0;

        int a[21000],b[21000],c[21000];

        for(i=0; i<n; i++)

        {

            scanf("%d%d%d",&a[i],&b[i],&c[i]);

            int x=a[i];

            while(x<=b[i])

            {

                ans=ans^((__int64)x);

                x+=c[i];

            }

        }

        int js=0;

        if(ans)

        {

            for(i=0;i<n;i++)

            {

                if(ans>=a[i]&&ans<=b[i]&&(ans-a[i])%c[i]==0)js++;

                //ans>=a[i]&&(ans-a[i])%c[i]==0最初写这样。该死的小bug

                //也怪自己改错的重心出了问题,以为是tricks。~~o(>_<)o ~~

            }

            printf("%I64d %d\n",ans,js);

        }

        else printf("DC Qiang is unhappy.\n");

    }

    return 0;

}

 

 

  

你可能感兴趣的:(HDU)