求调 WA 除了5,12 开了LL
查看原帖
求调 WA 除了5,12 开了LL
697932
Gcend楼主2024/10/18 15:16

我看别人都是没开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;
}
2024/10/18 15:16
加载中...