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模三判断是否相等即可
#includeusing 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月15日 15时06分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
POJ-3273 Monthly Expense(二分)
2019-04-30
POJ-3041 Asteroids(匈牙利算法)
2019-04-30
HDU-5695 Gym Class(拓扑排序)
2019-04-30
NYOJ-117 求逆序数(离散化+树状数组)/(归并)
2019-04-30
HDU-1285 确定比赛名次(拓扑排序)
2019-04-30
Codeforces-687A NP-Hard Problem(二分图染色)
2019-04-30
UVA-11080 Place the Guards(二分图染色)
2019-04-30
FZU 2231 平行四边形数(几何)(思维)
2019-04-30
FZU Problem 2232 炉石传说(匈牙利算法)
2019-04-30
UVA-12555 - Baby Me(控制精度)
2019-04-30
Java大数的使用
2019-04-30
Java Number类
2019-04-30
半数集与半数单集问题
2019-04-30
HDU-1297 Children’s Queue(递推)(高精度)
2019-04-30
HDU-5601 N*M bulbs(推导||规律)
2019-04-30
HDU-1316 How Many Fibs?(Java大数)
2019-04-30