记录编号 583423 评测结果 AAAAAAAAAA
题目名称 高级打字机 最终得分 100
用户昵称 Gravatar超人 是否通过 通过
代码语言 C++ 运行时间 0.725 s
提交时间 2023-10-13 21:53:17 内存使用 167.10 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+50;
int f[M][25],g[M][25],gjdzj[M],he[M],num[M];
int cnt,n,w;
char s[25],c[25],A[M];
void income()
{
    num[cnt]=num[cnt-1]+1;
    if(A[cnt-1]=='U') gjdzj[cnt]=gjdzj[cnt-1];
    else gjdzj[cnt-1]=cnt-1;
    if(A[cnt-1]=='U') f[cnt][0]=gjdzj[cnt-1];
    else f[cnt][0]=cnt-1;
    he[cnt]= cnt-1;
    for(int i=1;i<=20;i++) f[cnt][i]=f[f[cnt][i-1]][i-1];    
    g[cnt][0]=cnt-1;
    for(int i=1;i<=20;i++) g[cnt][i]=g[g[cnt][i-1]][i-1];
}
void outcome(int x)
{
    x--;
    int now=cnt;
    A[++cnt]='U';
    for(int i=20;i>=0;i--)
    {
        if((1<<i)<=x)
        {
            x-=(1<<i);
            now=g[now][i];
        }
    }
    now--;
    he[cnt]=now;
    num[cnt]=num[now];
    if(A[now]=='U') gjdzj[cnt]=gjdzj[now];
    else gjdzj[cnt]=now;
    if(A[now]=='U') f[cnt][0]=gjdzj[now];
    else f[cnt][0]=now;
    for(int i=1;i<=20;i++) f[cnt][i]=f[f[cnt][i-1]][i-1];
    g[cnt][0]=cnt-1;
    for(int i=1;i<=20;i++) g[cnt][i]=g[g[cnt][i-1]][i-1];
}
int main()
{
    freopen("type.in","r",stdin);
    freopen("type.out","w",stdout);
    cin>>n;
    A[0]='A';
    gjdzj[0]=0;
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        if(s[0]=='T')
        {
            cin>>c;
            A[++cnt]=c[0];
            income();
            continue;
        }
        if(s[0]=='U')
        {
            cin>>w;
            outcome(w);
            continue;
        }
        if(s[0]='Q')
        {
            cin>>w;
            w=num[cnt]-w+1;
            if(w<=0) w=1;
            if(A[cnt]!='U') w--;
            int now=cnt;
            for(int i=20;i>=0;i--)
            if((1<<i)<=w)
            {
                w-=(1<<i);
                now=f[now][i];
            }
            cout<<A[now]<<endl;
        }
    }   
    return 0; 
}