zoukankan      html  css  js  c++  java
  • CodeForces Gym 100500A A. Poetry Challenge DFS

    题目链接:

    http://codeforces.com/gym/100500/attachments

    题意:

    文字接龙,谁接不下去了,就算谁输 输出赢家
    都很聪明的情况下

    题解:

    看起来是博弈 不会啊 这个dfs还不懂
    qsc ls:转化成图论之后,直接DFS爆搜就好了!

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 #define MS(a) memset(a,0,sizeof(a))
     5 #define MP make_pair
     6 #define PB push_back
     7 const int INF = 0x3f3f3f3f;
     8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     9 inline ll read(){
    10     ll x=0,f=1;char ch=getchar();
    11     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return x*f;
    14 }
    15 //////////////////////////////////////////////////////////////////////////
    16 const int maxn = 1e4+10;
    17 
    18 int n,m,vis[30],flag;
    19 char s1[11][maxn],s2[11][maxn];
    20 vector<int> e[30];
    21 
    22 bool dfs(int x){
    23 
    24     for(int i=0; i<(int)e[x].size(); i++){
    25         int v = e[x][i];
    26         if(vis[v]) continue;
    27         vis[v] = 1;
    28         if(!dfs(v)){  // 返回了0 说明对于v 对手已经没有接的了  对当前玩家x来说 是不利的 不能选以v的开头为尾的x
    29             vis[v] = 0;
    30             return 1; // 返回1 对于上一层的这个点是不行的  就要选下一个点(如果有)
    31         }
    32     }
    33 
    34     return 0;  // 返回0表示 x的对手没有可以接的了, win
    35 }
    36 
    37 int main(){
    38     int T=read();
    39     for(int cas=1; cas<=T; cas++){
    40         for(int i=0; i<=25; i++) e[i].clear();
    41         MS(vis);
    42         flag = 0;
    43         n=read();
    44         for(int i=0; i<n; i++)
    45             gets(s1[i]);
    46         m = read();
    47         for(int i=0; i<m; i++)
    48             gets(s2[i]);
    49         for(int i=0; i<n; i++){
    50             int len = strlen(s1[i]);
    51             for(int j=0; j<m; j++)
    52                 if(s1[i][len-1] == s2[j][0])
    53                     e[i].push_back(j+9);
    54         }
    55 
    56         for(int j=0; j<m; j++){
    57             int len = strlen(s2[j]);
    58             for(int i=0; i<n; i++)
    59                 if(s2[j][len-1] == s1[i][0])
    60                     e[j+9].push_back(i);
    61         }
    62 
    63         for(int i=0; i<n; i++){
    64             vis[i] = 1;
    65             if(!dfs(i)){
    66                 flag = 1;
    67                 break;
    68             }
    69             vis[i] = 0;
    70         }
    71         if(flag) cout << "Game " << cas << ": player1
    ";
    72         else cout << "Game " << cas << ": player2
    ";
    73     }
    74 
    75     return 0;
    76 }
    77 
    78 //http://codeforces.com/gym/100500/attachments
  • 相关阅读:
    【MySQL案件】mysql登录-S失败
    python3使用smtplib发电子邮件
    oracle创建user具体指示
    设计模式的饕餮盛宴
    iOS使用UIScrollView实现左右滑动UITableView和UICollectionView
    MIFARE系列6《射频卡与读写器的通信》
    hdu1286 寻找新朋友 (欧拉功能)
    Python开发环境的搭建(win7)
    2014年度辛星完全解读html部分
    S2SH新手框架建立具体过程
  • 原文地址:https://www.cnblogs.com/yxg123123/p/6827677.html
Copyright © 2011-2022 走看看