ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#188360 | #3317. 行走(walk) | Lehe | 100 | 1973ms | 49736kb | C++11 | 1.6kb | 2023-10-03 08:54:19 | 2023-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