这场我真的会谢,A题都看错意思了快20min才开出来
c做到一半以为不会就玩手机去了,结束后仔细做会儿改个bug就出来了
so,补个D吧
题目给t(1<=t<=1000)个操作,每个操作输入一个源字符串(长度为偶,且len<=2000),同时Alice和Bob各有一个字符串且初始都为空,即""。
每次操作每个人可以从源字符串的头或尾选择一个字符剪切到自己字符串的头部。
当源字符串为空时,两个人的字符串按字典序比较,小的人获胜。
问是Alice或BOb胜还是平局。
字符区间为[l,r]时,每一轮二人都可选择一个字符,显然有以下选择
1 | Alice Bob |
对于一轮操作中的两个字符,要么s[i]==s[j],要么s[i]!=[j],可知Alice先手,则先手必然选择最优结果
以此类推当两个字符不同时,Alice是必胜状态,此外Bob不存在胜利情况。
我们可以用一个二维dp[i][j] 表示下标 i 到 j 之间Alice是否处于必胜状态,否则就是平局
由题目数据可知我们要查询区每段区间,有(n*n)/2 的复杂度,因为数据量比较小,还是可以过的
1 | int dp[3000][3000]; |
害。