*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;
}
posted @ 2022-09-23 17:55  Vijurria  阅读(100)  评论(0编辑  收藏  举报