CF1673A的题解

发布时间 2023-08-25 21:01:55作者: osfly

好久没做CF的水题了

由于每一个人都以最佳策略进行游戏且Alice先手。

设字符串长度为 \(|s|\)

我们可以考虑:

  1. \(|s|\) 为偶数,此时Alice可以直接全部取走,不给Bob任何机会 (人心险恶啊)

  2. \(|s|\) 为奇数,此时Alice最多取 \(|s|-1\) 个字符,也就剩下头和尾。

    对比头和尾,哪一个大就取哪一个。

注意:

如果长度为 \(1\) 的话,因为Alice只能取偶数长度的字串,所以取走的长度为 \(0\)。这时候,Bob必胜。

特别的,因为Alice先手且使用最佳策略,所以除了长度为 \(1\) 的情况,Alice必胜。

(突然觉得Bob好惨

code

#include<cstdio>
#include<cstring>
int t;
char s[200010];
int len;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s",s+1);
		len=strlen(s+1);
		if(len==1)
			printf("Bob %d\n",s[1]-'a'+1);
		else
		{
			if(len%2==0)
			{
				int sum=0;
				for(int i=1;i<=len;i++)
					sum+=s[i]-'a'+1;
				printf("Alice %d\n",sum);
			}
			else
			{
				int sum=0;
				if(s[1]>s[len])
				{
					for(int i=1;i<=len-1;i++) sum+=s[i]-'a'+1;
					sum-=(s[len]-'a'+1);
				}
				else
				{
					for(int i=2;i<=len;i++) sum+=s[i]-'a'+1;
					sum-=(s[1]-'a'+1);
				}
				printf("Alice %d\n",sum);
			}
		}
	}
	return 0;
}