神秘代码求调玄关
查看原帖
神秘代码求调玄关
479667
dahuiji楼主2025/1/18 03:24

rt,神秘代码增大min中inf会造成wa不同的点。 这个版本分最高,94,wa on #9

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
string s[301100];
ll rt[1130];
char j[301100];
struct z{
    ll dx;
    char zf;
}jd[301100];
ll cnt=0;
vector<ll> v[301100];
void dfs(ll now,ll qzdx,ll l,ll r){
    //cout<<now<<" "<<jd[now].zf<<endl;
    if(qzdx>r)return;
    if(jd[now].zf!='*'){
        if(qzdx>=l)cout<<jd[now].zf;
        return;
    }
    for(ll i=0;i<v[now].size();i++){
        qzdx+=jd[v[now][i]].dx;
        //cout<<v[now][i]<<endl;
        if(qzdx>=l&&qzdx-jd[v[now][i]].dx<=r)dfs(v[now][i],qzdx-jd[v[now][i]].dx,l,r);
    }
    return;
}
int main(){
    ll l,r;
    cin>>l>>r>>n;
    for(ll i=1;i<=n;i++)cin>>j[i]>>s[i];
    for(ll i=0;i<=int('z'-'a');i++){
        cnt++;
        jd[cnt].zf=char(i+'a');
        jd[cnt].dx=1;
        rt[i]=cnt;
    }
    for(ll i=n;i>=1;i--){
        if(s[i].size()==1){
            rt[j[i]-'a']=rt[s[i][0]-'a'];
            continue;
        }
        cnt++;
        for(ll o=0;o<s[i].size();o++){
            v[cnt].push_back(rt[s[i][o]-'a']);
            jd[cnt].dx=min(jd[rt[s[i][o]-'a']].dx+jd[cnt].dx,1000000000000000000ll);
        }
        jd[cnt].zf='*';
        rt[j[i]-'a']=cnt;
    }
    dfs(rt[0],1,l,r);
    return 0;
}

2025/1/18 03:24
加载中...