Description 最近 Alice 和 Bob 在玩一个和字符串有关的游戏。在游戏开始之前,他们会准备 n个字符串 s1~sn 游戏开始后,他们会轮流地执行以下操作,由 Alice 先手。 从 n 个字符串中选择一个字符串 si 得到的新字符串需要是 t 的子串; 如果上述过程无法完成,当前玩家失败,假设 Alice 和 Bob 都以最优策略行动,求出谁是游戏的胜者。 |t|<=1e5,∑|si|<=3e7 Solution 好了,我也是1/8个男人了(做男人好难 不如女装 ) 签到题没什么好说的,直接建SAM,在上面求SG就好了 Code #include <cstdio> #include <cstring> #include <algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=2e5+5; int n,lst,tot,ty,sg[ N ],p[ N ],vis[ N ],ws[ N ],son[ N ][ 26 ],pr[N],len[N]; char s[N]; int extend(int p,int x) { int np=++tot;len[np]=len[p]+1;