求调 WA 除了5,12 开了LL

P7077 [CSP-S2020] 函数调用

yangyafan @ 2024-10-18 15:16:29

我看别人都是没开LL才这样的
不求AC,能把我暴力改好就行,玄关

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
struct F1{
    int pos,x;
}f1[100010],f[100010];
struct F3{
    int sum;
    vector<int> s;
}f3[100010];
int a[100010],f2[100010],cnt1,cnt2,cnt3,tag[100010],n;
void dfs(int x,int y){
    if(x==1){
        a[f1[y].pos]*=tag[f1[y].pos]%mod,a[f1[y].pos]%=mod,a[f1[y].pos]+=f1[y].x%mod,tag[f1[y].pos]=1;
        return ;
    }
    else if(x==2){
        for(int i=1;i<=n;i++) tag[i]*=f2[y]%mod;
        return ;
    }
    else {
        int len=f3[y].sum;
        for(int i=0;i<len;i++) dfs(f[f3[y].s[i]].x,f[f3[y].s[i]].pos);
        return ;
    }
}
signed main(){
    for(int i=0;i<=100005;i++) tag[i]=1;
    int m,q;
    cin >>n;
    for(int i=1;i<=n;i++) cin >>a[i];
    cin >>m;
    for(int i=1;i<=m;i++){
        int op;
        cin >>op;
        if(op==1) cin >>f1[cnt1].pos>>f1[cnt1].x,f[i].pos=cnt1++,f[i].x=1;
        else if(op==2) cin >>f2[cnt2],f[i].pos=cnt2++,f[i].x=2;
        else {
            cin >>f3[cnt3].sum;
            for(int i=0;i<f3[cnt3].sum;i++){
                int x;
                cin >>x;
                f3[cnt3].s.push_back(x);
            }
            f[i].pos=cnt3++,f[i].x=3;
        }
    }
    cin >>q;
    for(int i=1;i<=q;i++){
        int x;
        cin >>x;
        int p=f[x].x,q=f[x].pos;
        dfs(p,q);
    }
    for(int i=1;i<=n;i++) cout <<(a[i]%mod*tag[i]%mod)%mod<<" ";
    return 0;
}

|