• 【洛谷1288】取数游戏II


    原题:

    题目中有两个需要注意的地方

    一个是每次移动可以减少任意多数,另一个是保证至少有一个0

    这两个我一开始都没看见,结果居然还想出一个结论 = =

    长年读题苦手,wtcl T_T

    既然保证至少有一个0,那么可以考虑一个极端的先手必胜的情况

    那就是存在一个方向,使得沿这个方向走奇数条边能碰到一个0边

    那么先手每次把这个方向上的边清掉,后手就莫得选

    不管后手是否把下一条边拿完,只要先手继续推着往前走,他就没有机会再去管那条边

    那么如果先手两边有一种方向长度为奇数,他就必胜

    如果两边都是偶数,那么不管往哪里走,后手就出现了一条奇数路径,后手必胜

    所以判一下起点两个方向的路径奇偶性即可

    那么问题来了

    每次移动只能减少1,不保证有0的时候该怎么做呢

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int n,a[110];
     5 int main(){
     6     cin>>n;
     7     for(int i=1;i<=n;++i)  scanf("%d",&a[i]);
     8     int mk1=0,mk2=0;
     9     for(mk1=1;mk1<=n && a[mk1]!=0;++mk1);
    10     for(mk2=n;mk2>=1 && a[mk2]!=0;--mk2);
    11     cout<<((mk1-1)%2==1 || (n-mk2)%2==1 ? "YES" : "NO")<<endl;
    12     return 0;
    13 }
    View Code
  • 相关阅读:
    Gym
    博客搬家
    UVA
    UVA
    UVA
    UVA
    UVA
    UVA1589——xiangqi
    SDUSToj第十一次作业源代码格式问题
    【成长之路】【python】python基础3
  • 原文地址:https://www.cnblogs.com/cdcq/p/12691845.html
Copyright © 2020-2023  润新知