X-man

导航

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

 

 

  

posted on 2013-09-29 10:03  雨钝风轻  阅读(340)  评论(0编辑  收藏  举报