首页 > 其他分享 >AT2395 [ARC071C] TrBBnsformBBtion 题解

AT2395 [ARC071C] TrBBnsformBBtion 题解

时间:2023-05-25 21:59:11浏览次数:47  
标签:AT2395 AAA int 题解 可以 Al Bl Br ARC071C

题目大意

有两个只包含 \(A\) 和 \(B\) 的字符串,给出两种操作

  • A 可以变为 BB , B 可以变为 A
  • AAA 可以消去, BBB 也可以消去。

思路

找规律。

这里我们以 A 为主,将 B 全部变为 A 。因为可以无限次操作,那么就代表如果两个字符串可以相等,那么他们就一定能够经过转化后变成同一个字符串,不会因为操作的限制导致不相等。

那么我们假设有一个串是 AABB ,那么他就可以转化成 AAAAAA 或者是 AAA ;相同的, BBB 可以转化成 AAAAAA 或者是 AAA :由此我们可以发现,在全部转化为一个字母后,如果两个串转化后可以相等,那么两个串全部转化为 A 后模 \(3\) 同余。

既然 AB 的个数已经固定,并且题目让你求的是大串中的字串是否相等,那么我们就把 A 的值设为 \(1\) , B 的值设为 \(2\),给一个前缀和数组来记录即可,这样我们就可以实现 \(\mathcal{O(1)}\) 的查询了。

代码实现

#include<bits/stdc++.h>
const int L=1e5+5;
using namespace std;

string a,b;
int A[L],B[L],oriA[L],oriB[L];/*ori数组记录原A和B代表的值,A B数组是前缀和数组*/
int q,Al,Ar,Bl,Br;

int main()
{
	ios::sync_with_stdio(false);
	cin >> a >> b;
	for(int i=0;i<a.size();i++)
	{
		if(a[i] == 'A') oriA[i+1]=1;/*A为1,B为2*/
		else oriA[i+1]=2;
	}
	for(int i=0;i<b.size();i++)/*同理*/
	{
		if(b[i] == 'A') oriB[i+1]=1;
		else oriB[i+1]=2;
	}
	for(int i=1;i<=a.size();i++) A[i]=A[i-1]+oriA[i];
	for(int i=1;i<=b.size();i++) B[i]=B[i-1]+oriB[i];/*记录前缀和*/
	cin >> q;
	for(int i=1;i<=q;i++)
	{
		cin >> Al >> Ar >> Bl >> Br;
		if((A[Ar]-A[Al-1]) % 3 == (B[Br]-B[Bl-1]) % 3) cout << "YES" << endl;/*查询*/
		else cout <<"NO"<<endl;
	}
}

标签:AT2395,AAA,int,题解,可以,Al,Bl,Br,ARC071C
From: https://www.cnblogs.com/bloodstalk/p/17433056.html

相关文章

  • CF714B Filya and Homework 题解
    题意给定一个长度为\(n\)的数组。我们可以给一些数加上一个\(x\),也可以减去一个\(x\),也可以不加也不减。问:是否存在一个数\(x\),使得这个数组里各个数都相等。思路一道思维题首先考虑,在这个数组中,相同的元素,我们一定是给它做相同的操作,否则一定不相等,根据这个思想,......
  • UVA1514 Piece it together 题解
    图论题还是在于建图题意给定一个长度为\(n\timesm\)的网格图,有的地方是白方块,有的是黑方块,有的啥也没用。给你如下四种\(L\)形方块,询问是否存在方法,让这些方块正好就是给出的图的形状。$L$形方块如下思路二分图首先我们要想,为什么需要二分图:若能拼成,那么就说......
  • SP15637 Mr Youngs Picture Permutations 题解
    题意给定一个最多有\(5\)排的一个队伍,每一个位置对应一个同学,给定总人数和第\(i\)排要站\(n_i\)个人。要求每行左边的同学身高要大于右边的,每列从上往下要从大到小。问:满足要求的一共有多少种方案。思路DP首先考虑,在这个题目中,有用的状态有每列最后的人的高度,每行......
  • P8584 探索未知 题解
    题意给你\(n\)个分数,每个分数后面跟着一个操作符\(op\),如果为\(1\)就是加上这个分数,是\(2\)就减去。初始时是\(0\),询问\(n\)次操作后最后的分数是多少,化成最简分数。特殊地,如果最后是个整数,直接以整数的形式输出。思路模拟考试的时候一看就想到了[NOIP2020]......
  • P8587 新的家乡 题解
    题意给定\(n\)个高度分别为\(h_i\)的柱子,两个柱子能合并成一个\(h_i+h_j\)的新柱子,每根柱子至多被使用一次。询问最多能建出多少根高度相同的柱子,并且最优答案下柱子的高度有多少种情况。\(1\leqn\leq10^6\),\(1\leqh_i\leq3\times10^3\)。思路爆搜!首先我们......
  • P8585 球状精灵的传说 题解
    很好的一个题题意给你\(n\)个三元组\((r_1,r_2,r_3)\),并定义\(ρ=\lfloor\frac{1}{4}min(r_1,r_2,r_3)^3\rfloor\)。两个三元组能合并当且仅当这两个三元组有至少两个值相同,即从\((x_1,y,z)\)和\((x_2,y,z)\)变为\((x_1+x_2,y,z)\)。\((x,y,z)\)的位置不固定......
  • Android 修改 android/hardware/interfaces 下HIDL接口编译报异常问题解决
    最近要增加hostapd的一个HIDL接口,修改android/hardware/interfaces/wifi/hostapd/1.2/IHostapd.hal文件后编译报错如下:ERROR:android.hardware.wifi.hostapd@1.2::IHostapdhashashacaed0a159a521bd4964e0fb8117320849109d3eeaff6a08b4d2506156ce6987whichdoesnotmatch......
  • P2480 古代猪文 题解
    题意:求\[g^{\sum_{k\midn}{n\choosek}}\]对\(999911659\)取模。\(1\len,g\le10^9\)。思路:首先根据欧拉定理,题目转化为求\(\displaystyle\sum_{k\midn}{n\choosek}\)对\(999911658\)取模的值。模数为合数不是很好做,因式分解发现\(999911658=2\times3\times467......
  • JOISC 2021 题解
    JOISC21フードコート(FoodCourt)首先我们发现我们这个删除实际上可以假删除,我们每次问询时求出这个队列目前被删了几个(维护区间加,区间\(\max(0,A-x)\))就可以把删除操作给弄掉了。然后我们考虑对商店做扫描线!因为我们现在其实就是对商店的单点问询,我们这个加入操作也可以在左......
  • 【题解】Codeforces Round 737 (CF1557)
    VP情况:solve:4/5rank:431st评价:VP了一下,我这个shaberB直接5发罚时,耽误了二十多分钟,以及被D各种细节差点搞死。A.EzzatandTwoSubsequences(*800)题目描述:给定一个序列,将其分为\(2\)个组,要求这两个组的平均值之和最大,组内的数不要求在原序列中连续。题目分析:我们......