求分析此份CSP-S2020T3代码复杂度
  • 板块学术版
  • 楼主OrinLoong
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/11 15:34
  • 上次更新2024/9/11 20:32:22
查看原帖
求分析此份CSP-S2020T3代码复杂度
539345
OrinLoong楼主2024/9/11 15:34

最纯粹精简直接的一遍处理居然T掉了五个点!气死偶咧!
但是为什么会这样呢?希望有巨佬分析下复杂度。

#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
const int MAXN=1e5+5,MOD=998244353;
int N,M,C,V,Q;
ll A[MAXN],add[MAXN],multag=1;
struct func{
	int typ,idx;
	ll val;
}F[MAXN];
vector<int> G[MAXN];
void solve(int u){
	//printf("u=%d,typ=%d,curtag=%lld\n",u,F[u].typ,multag);
	if(F[u].typ==1){add[F[u].idx]=(add[F[u].idx]+F[u].val*multag)%MOD;return;}
	if(F[u].typ==2){multag=multag*F[u].val%MOD;return;}
	for(int i = G[u].size()-1;i >= 0;i--){
		int v=G[u][i];
		solve(v);
	}
}
int main(){
	scanf("%d",&N);
	for(int i = 1;i <= N;i++)scanf("%lld",&A[i]);
	scanf("%d",&M);
	for(int i = 1;i <= M;i++){
		scanf("%d",&F[i].typ);
		if(F[i].typ==1)scanf("%d%lld",&F[i].idx,&F[i].val);
		if(F[i].typ==2)scanf("%lld",&F[i].val);
		if(F[i].typ==3){
			scanf("%d",&C);
			for(int j = 1;j <= C;j++)scanf("%d",&V),G[i].push_back(V);
		}
	}
	scanf("%d",&Q);
	for(int i = 1;i <= Q;i++)scanf("%d",&V),G[0].push_back(V);
	solve(0);
	for(int i = 1;i <= N;i++)printf("%lld ",(A[i]*multag+add[i])%MOD);
	return 0;
}
2024/9/11 15:34
加载中...