题目链接

该题实质上是一个树上博弈的问题。要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制

  • 叶子结点为先手必胜态;
  • 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态;
  • 若某结点的所有儿子都是先手必胜态,则该结点为先手必败态;
  • 若某结点的儿子既有先手必胜态,又有先手必败态,或者是存在不能控制态,则该状态为可输可赢;
  • 若某结点的所有儿子都是可输可赢态,则该结点为不能控制态。
  • 若某结点的儿子除了可输可赢态外还有其他状态,那么就当可输可赢态不存在。因为,不能将主导权交给对手。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

];
int n,k;
int tot;
][];
];

void insert(char* s)
{
    ,tc;
    ;i<l;i++)
    {
        tc=s[i]-'a';
        if(!ch[x][tc])
            ch[x][tc]=++tot;
        x=ch[x][tc];
    }
}
void dfs(int x)
{
    ;
    ;i<;i++)
    {
        if(ch[x][i])
        {
            vis=;
            dfs(ch[x][i]);
            dp[x]|=dp[ch[x][i]]^;
        }
    }
    ;
}

int main()
{
    scanf("%d%d",&n,&k);
    ;i<=n;i++)
    {
        scanf("%s",ts);
        insert(ts);
    }
    dfs();
    ]==||dp[]==)
        puts("Second");
    ]==)
        puts(k&? "First":"Second");
    ]==)
        puts("First");
}
05-06 04:05
查看更多