题目大意:有一个字符串,和两个空串,Alice和Bob轮流从字符串的前端和后端取出一个字符放到自己的字符串的前边,问都取完后谁的字符串更大或是平局
思路:因为字符串的长度为偶数,所以爱丽丝肯定会拿到字典序最大的那个字符,因为只要最后一轮拿的一个字符更大就会赢,,在最后一轮又是Alice先手,所以BOB是不可能赢得,那么只要判断最后剩下的两个字符是否相等即可,不难发现,对于在字符串两端相同的字母Alice和Bob拿取的机会是相同的,所以不影响结果判断,先舍去这一部分字符,然后我们判断每个字符与他相邻的一个字符是否相同,只有在相同的情况下,Alice拿取一个后,Bob拿取相同字符才能使自己不败,如果有两个相邻字符不同,Alice总有办法拿到更大的那一个,所以Bob的最佳策略只是拿取和Alice相同的字符
- #include
- #include
- using namespace std;
- int main()
- {
- int t;
- cin >> t;
- while (t--)
- {
- string s;
- cin >> s;
- int l = 0, r = s.length() - 1;
- while (l < r && s[l] == s[r])
- {//舍去两端相邻字符
- l++;
- r--;
- }
- bool ans = 1;
- while (l < r)
- {//判断相邻字符是否相同
- if (s[l] != s[l + 1])
- ans = 0;
- l += 2;
- }
- if (ans)
- {
- printf("Draw\n");
- }
- else
- {
- printf("Alice\n");
- }
- }
- return 0;
- }