*ABC 242 D - ABC Transform(dfs)
https://atcoder.jp/contests/abc242/tasks/abc242_d
题目大意:
初始化给定一个字符串为S(S中只包含A B C三种字符)
每次经过一次操作下:A就会变成BC,B变成CA,C变成AB。
问我们在第x次变化后,第k个字符串是什么?
Sample Input 1
ABC
4
0 1
1 1
1 3
1 6
Sample Output 1
A
B
C
B
Sample Input 2
CBBAACCCCC
5
57530144230160008 659279164847814847
29622990657296329 861239705300265164
509705228051901259 994708708957785197
176678501072691541 655134104344481648
827291290937314275 407121144297426665
Sample Output 2
A
A
C
A
A
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1000020;
const LL N=500200,M=2002;
string s;
LL q;
LL dfs(LL x,LL k)
{
//如果在第0层的时候,直接返回第k个位置上的数字
if(x==0) return 1LL*(s[k]-'A');
//如果k是当前层数的第一个的时候?
if(k==0) return 1LL*(s[0]-'A'+x)%3;
return (dfs(x-1,k/2)+k%2+1)%3;
}
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
//cin>>T;
while(T--)
{
cin>>s;
cin>>q;
while(q--)
{
LL x,k;
cin>>x>>k;
//找到第x层,第k-1的下标下的字母(也即是第k个字母)
cout<<char('A'+dfs(x,k-1))<<endl;
}
}
return 0;
}