• CF-1382B. Sequential Nim(博弈,模拟)


    CF传送门

    洛谷传送门


    解题思路

    首先一种不动脑子的做法就是模拟(就是我的做法)

    从后往前推,用一个变量y记录状态,枚举到第i堆时,y==1表示到第i堆需要的先手才能胜,y==0表示到第i堆需要后手才能胜。

    推到第1位时,若y==1,则first胜,否则second胜。

    代码见下方。

    写出代码后发现,影响y的其实只有数量为1的前i堆。

    于是我们继续探究(题解)不难发现,当遇到某一堆(数量大于1)且你是先手时,你就主宰了游戏,

    因为你可以取k-1个使下一堆仍是你先手,或者去k个使下一堆你后手以便经过奇数个数量为1的堆后夺回先手权。

    所以真正影响的就是谁先遇到数量大于1的一堆,即前缀1的数量。

    AC代码

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<queue>
     8 #include<set>
     9 #include<map>
    10 #include<vector>
    11 #include<iomanip>
    12 #include<ctime>
    13 #include<stack>
    14 using namespace std;
    15 const int maxn=100005;
    16 int n,a[maxn],t; 
    17 int main()
    18 {
    19     cin>>t;
    20     while(t--){
    21         int y=1;
    22         scanf("%d",&n);
    23         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    24         for(int i=n-1;i>=1;i--){
    25             if(a[i]==1){
    26                 if(y==1) y=0;
    27                 else y=1;
    28             }else{
    29                 y=1;
    30             }
    31         }
    32         if(y==1) printf("First
    ");
    33         else printf("Second
    ");
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    Pikachu-File Inclusion模块
    Pikachu-RCE模块
    Pikachu-CSRF模块
    Pikachu-暴力破解模块
    Pikachu-XSS模块与3个案例演示
    将Word文档发布至博客园随笔
    DVWA-全等级XSS(反射型、存储型)
    DVWA-sql注入(盲注)
    DVWA-全等级验证码Insecure CAPTCHA
    管理页面的 setTimeout & setInterval
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/14711448.html
Copyright © 2020-2023  润新知