大红(WA)大紫(RE)?
查看原帖
大红(WA)大紫(RE)?
335094
Lucifero楼主2020/11/16 18:58

不会啊,每个样例都过了,虽然不是正解,但起码也能得到一点分吧……

蒟蒻 1h 都花在这上面了,不甘心!!!

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
int a[200000],T[200000],P[200000],V[200000],g[2000][2000],f,n,m;
void face1(int x,int k)
{
	a[x]=(a[x]%mod+k%mod)%mod;
}
void face2(int k)
{
	for(register int i=1;i<=n;i++) a[i]=(a[i]%mod*k%mod)%mod;
}
void face3(int u,int v)
{
	for(register int i=1;i<=v;i++)
		if (T[g[u][i]]==1)
			face1(P[g[u][i]],V[g[u][i]]);
		else if (T[g[u][i]]==2)
			face2(V[g[u][i]]);
		else if (T[g[u][i]]==3)
			face3(g[u][i],P[g[u][i]]);
}
int main()
{
	//函数调用
	register bool flag=false;
	register int Q,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++) scanf("%d",&a[i]);
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d",&T[i]);
		if (T[i]==1)
		{
			flag=true;
			scanf("%d%d",&P[i],&V[i]);
		}
		else if (T[i]==2)
		{
			flag=true;
			scanf("%d",&V[i]);
		}
		else if (T[i]==3)
		{	
			scanf("%d",&P[i]);
			for(j=1;j<=P[i];j++) scanf("%d",&g[i][j]);
		}
	}
	if (!flag)
	{
		printf("%d ",a[i]%mod);
		return 0;
	}
	scanf("%d",&Q);
	for(i=1;i<=Q;i++)
	{
		scanf("%d",&f);
		if (T[f]==1)
			face1(P[f],V[f]);
		else if (T[f]==2)
			face2(V[f]);
		else if (T[f]==3)
			face3(f,P[f]);
	}
	for(i=1;i<=n;i++) printf("%d ",a[i]%mod);
	printf("\n");
	return 0;
}
2020/11/16 18:58
加载中...