zoukankan      html  css  js  c++  java
  • Codeforces 455B A Lot of Games

    http://codeforces.com/contest/455/problem/B

    题目大意:

    给出n个字符串,进行k次游戏,每次游戏输家下次作为先手,游戏规则为每次放一个字母,导致当前构造的字符串是给定的任意一个字符串的前缀,不能操作时为输,赢得第k次比赛的人会取得最终的胜利,问两人都采取最优策略的情况下,谁会赢得比赛。

    思路:

    00代表无法控制,10代表胜,01代表必败,11代表能赢能输。

    如果能赢能输,那么可以一直控制自己前k-1场输,最后赢。

    如果先手输,那么一定输

    如果只能赢,那么胜负只与场数的奇偶有关、

     

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<iostream>
     6 int ch[100005][26],n,m,sz,f[200005],root,flag;
     7 char s[100005];
     8 int read(){
     9     int t=0,f=1;char ch=getchar();
    10     while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    11     while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}
    12     return t*f;
    13 }
    14 void insert(){
    15     scanf("%s",s+1);
    16     int now=root,len=strlen(s+1);
    17     for (int i=1;i<=len;i++){
    18        if (ch[now][s[i]-'a']==0) ch[now][s[i]-'a']=++sz;
    19        now=ch[now][s[i]-'a'];     
    20     }
    21 }
    22 int dfs(int x,int fa){
    23     bool pd=0;int ans=0;
    24     for (int i=0;i<26;i++)
    25      if (ch[x][i]){
    26         ans|=dfs(ch[x][i],x)^3;
    27         pd=1;
    28      } 
    29     if (!pd) ans=1;
    30     return ans;  
    31 }
    32 int main(){
    33     n=read();m=read();
    34     for (int i=1;i<=n;i++){
    35         insert();
    36     }
    37     int tmp=dfs(0,0);
    38     if (tmp==3) printf("First");
    39     else
    40     if (tmp==2){
    41         if (m%2==1) printf("First");
    42         else printf("Second");
    43     }
    44     else
    45     printf("Second");
    46     return 0;
    47 }

     

     

  • 相关阅读:
    Springboot整合Dubbo
    网站appache的ab命令压力测试性能
    静态页面框架
    CSS布局设计
    弹性盒子的总结
    弹性盒子
    应用媒介查询制作响应式导航栏
    响应式的设计需要遵守的4个原则和媒介查询语句
    media type的类型汇总
    background-orgin属性
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5630944.html
Copyright © 2011-2022 走看看