zoukankan      html  css  js  c++  java
  • 【洛谷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
  • 相关阅读:
    Java中的权限修饰符
    return,break,continue三者的区别
    JS代码放在不同位置的区别
    创建画笔工具
    关于SPH的核函数求导过程
    c++多级指针与“多维”数组 摘自别人博客
    RAP开发入门-搭建RAP开发环境(一)
    06 media媒体查询
    resolution 像素密度
    手动配置viewport-04
  • 原文地址:https://www.cnblogs.com/cdcq/p/12691845.html
Copyright © 2011-2022 走看看