题解 P8271 [USACO22OPEN] COW Operations S
面对这种题目要大胆赋值。
考虑序列肯定可以不停操作,最后剩下可能是:空、C
、O
、W
。
我们把空赋值为 ,COW
三个字母分别是 。
操作 对应的是两个相等的数运算后得 。操作 则是两个不相等的数运算后得到第三个数。还有一点是 和任何数运算得 。
容易发现这就是异或运算!XOR 是具有交换律和结合律的,因此操作结果与顺序无关,就是所有字母的异或值。
所以就一下 XOR 前缀和,每次询问回答就行了。
#include <bits/stdc++.h>
using namespace std;
const int N=500005;
int n,m;
char a[N];
int s[N];
inline int read()
{
int F=1,ANS=0;
char C=getchar();
while (C<'0'||C>'9')
{
if (C=='-') F=-1;
C=getchar();
}
while (C>='0'&&C<='9')
{
ANS=ANS*10+C-'0';
C=getchar();
}
return F*ANS;
}
int main()
{
cin >> (a+1);
n=strlen(a+1);
m=read();
for (int i=1;i<=n;i++)
{
if (a[i]=='C') s[i]=(s[i-1]^1);
else if (a[i]=='O') s[i]=(s[i-1]^2);
else s[i]=(s[i-1]^3);
}
for (int i=1;i<=m;i++)
{
int l=read(),r=read(),ans=s[r]^s[l-1];
if (ans==1) printf("Y");
else printf("N");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2021-06-30 题解 P4025 [PA2014]Bohater