結果
問題 |
No.3040 Aoiスコア
|
ユーザー |
|
提出日時 | 2025-02-28 21:41:33 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 181 ms / 1,000 ms |
コード長 | 1,060 bytes |
コンパイル時間 | 6,753 ms |
コンパイル使用メモリ | 337,720 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-06-20 20:55:36 |
合計ジャッジ時間 | 7,712 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<atcoder/all> using namespace atcoder; using mint=atcoder::modint998244353; int main(){ int N,M;cin>>N>>M; string S;cin>>S; vector<pair<int,int>> edge(M); for(auto&&[a,b]:edge){ cin>>a>>b; a--;b--; } int cnt=0; for(auto&&e:S){ if(e=='?')cnt++; } vector<mint> pw={1}; for(int i=0;i<cnt;i++)pw.push_back(pw.back()*26); auto j1=[&](int i){ return S[i]=='a'||S[i]=='?'; }; auto j2=[&](int i){ return S[i]=='o'||S[i]=='?'; }; auto j3=[&](int i){ return S[i]=='i'||S[i]=='?'; }; auto j4=[&](int i){ return S[i]=='?'; }; mint ans=0; for(int i=0;i<M;i++){ for(int j=0;j<M;j++){ if(i==j)continue; auto[u1,u2]=edge[i]; auto[v1,v2]=edge[j]; for(int p=0;p<2;p++){ for(int q=0;q<2;q++){ if(u2==v1){ if(j1(u1)&&j2(u2)&&j3(v2)){ int cnt2=cnt-j4(u1)-j4(u2)-j4(v2); ans+=pw[cnt2]; } } swap(v1,v2); } swap(u1,u2); } } } cout<<ans.val()<<endl; }