UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#188360#3317. 行走(walk)Lehe1001973ms49736kbC++111.6kb2023-10-03 08:54:192023-10-03 12:48:20

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int n,cnt[200010][8],vis[200010],ans;
string s;
vector<int>g[200010],g2[200010];
int quickpow(int x,int p)
{
	int ans=1,base=x;
	while(p)
	{
		if(p&1)ans=ans*base%mod;
		base=base*base%mod;
		p>>=1;
	}
	return ans;
}
void dfs(int u)
{
	int type=s[u]-'a';
	cnt[u][0]=1;
	cnt[u][1<<type]=1;
	vis[u]=1;
	for(auto v:g[u])
		if(!vis[v])
		{
			g2[u].push_back(v);
			dfs(v);
			for(int i=1;i<8;i++)(cnt[u][i|(1<<type)]+=cnt[v][i])%=mod;
		}
}
signed main()
{
//	freopen("ex_walk3.in","r",stdin);
	cin>>n>>s;
	s=" "+s;
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1);
//	for(int i=1;i<=n;i++)
//	{
//		cout<<"g2["<<i<<"]:";
//		for(auto j:g2[i])cout<<j<<" ";
//		cout<<endl;
//	}
//	for(int i=1;i<=n;i++)
//		for(int j=0;j<8;j++)
//			cout<<"cnt["<<i<<"]["<<j<<"]="<<cnt[i][j]<<endl;
	for(int i=1;i<=n;i++)
	{
		int b[8]={0};
		for(auto j:g2[i])
			for(int k=1;k<8;k++)
				b[k]=(b[k]+cnt[j][k])%mod;
		int type=s[i]-'a';
		int p=cnt[i][7]*2%mod;
//		cout<<"i="<<i<<endl;
//		for(int k=0;k<8;k++)cout<<"b["<<k<<"]="<<b[k]<<endl;
		for(auto j:g2[i])
			for(int k1=1;k1<8;k1++)
				for(int k2=1;k2<8;k2++)
					if((k1|k2|(1<<type))==7)
					{
//						cout<<" "<<i<<" "<<j<<" "<<k1<<" "<<k2<<" "<<cnt[j][k1]<<" "<<b[k2]-cnt[j][k2]<<endl;
						p=(p+cnt[j][k1]*(b[k2]-cnt[j][k2]+mod)%mod)%mod;
					}
		p=p*quickpow(2,mod-2)%mod;
//		cout<<i<<" "<<p<<endl;
		ans=(ans+p)%mod; 
	}
	cout<<ans;
	return 0;
} 

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 4ms
memory: 10908kb

input:

2000
ababbcaaacccaabbaaacaabbbbcbcaaaacaaaaacaacbaaaaaaacbcaaacabbcaaacbbcbaabacbacbacbcbaacaacbbcab...

output:

1984050

result:

ok single line: '1984050'

Test #2:

score: 10
Accepted
time: 3ms
memory: 10904kb

input:

2000
accbccbcaacbabbbcbcccbacbccabbccccbccccaccccccbcaccabbcbbbcbccaaccbcccacabbaacbbcabccbaaccbabbb...

output:

1982714

result:

ok single line: '1982714'

Test #3:

score: 10
Accepted
time: 7ms
memory: 10912kb

input:

2000
cccacccbabaacaaacccbbbabcabacabbcbcabacbbaaccaabbcabbbaabbaaababbbabcbcabbccbabacbbcbbbbbbaccbb...

output:

1983256

result:

ok single line: '1983256'

Test #4:

score: 10
Accepted
time: 221ms
memory: 49732kb

input:

200000
aabaaccabcbbabacbcacbaaaccbbbacacacacabbbabcbaabbabcbbbcbbbacababababcaccabcaacbccbaabbbcccbb...

output:

34314841

result:

ok single line: '34314841'

Test #5:

score: 10
Accepted
time: 212ms
memory: 49736kb

input:

200000
bcaaabccbccbaaacabccaaacabcccbccabacbbbbccbacaacccacbaabcabccbcabcbaabaabababbbbcbacacbbaabba...

output:

34315707

result:

ok single line: '34315707'

Test #6:

score: 10
Accepted
time: 219ms
memory: 49732kb

input:

200000
babcaaccaabccbbccbbabcbaccbababbcaacbaccccccabacacbcccabbccbcccacaaabccbbbabbabbcccbaaabcaaaa...

output:

34309683

result:

ok single line: '34309683'

Test #7:

score: 10
Accepted
time: 357ms
memory: 36268kb

input:

200000
abbaaaabbabaabaaabbbaababbabaabaabababaabaababbaaaaababbabaabbabbbbbbbbbababbbaabaaabaabbbbab...

output:

199998

result:

ok single line: '199998'

Test #8:

score: 10
Accepted
time: 315ms
memory: 36268kb

input:

200000
babababbbbbbababaaabaaabaaababbbbabbaaaabaaaabbbbbbaaaaaabbabbabaabaabbaabbbbabbbaabbaababaab...

output:

799971

result:

ok single line: '799971'

Test #9:

score: 10
Accepted
time: 321ms
memory: 36272kb

input:

200000
aabccccabaabcbabcbaabbaccaaaccbcbbbbaccabbcaabbaababbbbacacbcccabcbbbccababccbccbccaaaabccacb...

output:

33543853

result:

ok single line: '33543853'

Test #10:

score: 10
Accepted
time: 314ms
memory: 36268kb

input:

200000
abaabbabacabaabaccbbabcbabbaababbbccabbaacacbcbbcbcacccabbbaccaaccaaaccbabbaabbcbcbaaaaabbbcb...

output:

33539915

result:

ok single line: '33539915'

Extra Test:

score: 0
Extra Test Passed