HDU -- 5600 N bulbs 【思维 + 规律】

来源:互联网 发布:linux的shutdown命令 编辑:程序博客网 时间:2024/06/08 02:45

传送门
//题意: 给定n个灯的状态, 1表示开,0 表示关. 一个小孩从第一个灯走到最后一个灯, 走时和一选择相邻的任何一方走. 走过当前这个灯时, 这个灯的状态想相反状态变化. 问是否可以让小孩从最后一个灯离开时, 所有的灯都是关着的

//思路: 这道题也没什么好方法, 只有多写几个样例出来研究研究, 可以发现, 灯总数的奇偶和1(或0)的奇偶有关.
其实也好发现, 当有5个灯时, 2个灯开着, 可以发现无论这2个灯在何处, 怎样走, 都是有一个灯亮着, 那么就可以知道知道在多一个(或者少一个)亮着的灯, 那么就可以把所有的灯都关掉. 其实首先应该知道就是相邻一对的0或1都是没有用的, 总可以关完所有的灯并离开,那么剩下的就是01间隔, 此时不断的举例(我是通过的4,5)也就可以发现这个结论了. 所以当灯的总数的奇偶和亮着(关着的灯相反)的灯奇偶一致时就是YES, 否则就是NO.

AC Code

/** @Cain*/void solve(){    int n;    scanf("%d",&n);    int cnt = 0;    for(int i=1;i<=n;i++){        scanf("%d",&a[i]);        cnt+=a[i];    }    if(n%2 == cnt%2) puts("YES");    else puts("NO");}