AT2395 [ARC071C] TrBBnsformBBtion(构造)
发布日期:2021-06-30 10:33:09 浏览次数:2 分类:技术文章

本文共 1045 字,大约阅读时间需要 3 分钟。

发现操作是可逆的

①. A A A可以变为 B B BB BB, B B BB BB也能变为 A A A

B B − > A A A A − > A BB->AAAA->A BB>AAAA>A

②. A A A AAA AAA可以消除,同样如果存在一个 A A A那么可以创造 3 x + 1 3x+1 3x+1 A A A

A − > B B − > A A B − > A A A A A->BB->AAB->AAAA A>BB>AAB>AAAA

既然证明了操作可逆,那么可以同时对 S , T S,T S,T串进行变换也不影响结果

所以我们直接选择把 S S S中所有的字母 B B B变成 A A A

把串 T T T中的字母 B B B变成 A A A

那么现在 S S S串有 x x x A A A,而 T T T串有 y y y A A A

前面说到因为一个 A A A可以转化为 3 x + 1 3x+1 3x+1 A A A

所以 A A A的个数是没有意义的,直接对 x , y x,y x,y模三判断是否相等即可

#include 
using namespace std;const int maxn = 1e6+10;char a[maxn],b[maxn];int pre1[maxn],pre2[maxn];int main(){
cin >> ( a+1 ) >> ( b+1 ); int n = strlen( a+1 ), m = strlen( b+1 ); for(int i=1;i<=n;i++) pre1[i] = ( pre1[i-1]+(a[i]=='A') ); for(int i=1;i<=m;i++) pre2[i] = ( pre2[i-1]+(b[i]=='A') ); int q; cin >> q; while( q-- ) {
int l,r,q,w; scanf("%d%d%d%d",&l,&r,&q,&w); int a1 = pre1[r]-pre1[l-1], b1 = r-l+1-a1; a1 += 2*b1; int a2 = pre2[w]-pre2[q-1], b2 = w-q+1-a2; a2 += 2*b2; if( a1%3==a2%3 ) printf("YES\n"); else printf("NO\n"); }}```

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/116719863 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2017-2018 ACM-ICPC Asia East Continent League Final L. SOS(博弈,思维)
下一篇:2018-2019 ACM-ICPC南京 M. Mediocre String Problem(SAM+PAM)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月15日 15时06分47秒