結果
| 問題 |
No.3040 Aoiスコア
|
| コンテスト | |
| ユーザー |
it_is_a_pity_
|
| 提出日時 | 2025-02-28 23:02:23 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,509 bytes |
| コンパイル時間 | 3,769 ms |
| コンパイル使用メモリ | 255,748 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-06-20 21:00:25 |
| 合計ジャッジ時間 | 4,271 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 11 WA * 15 |
ソースコード
#ifdef LOCAL
#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using namespace std;
#define ll long long
#define rep(i,n) for(ll i=0;i<(ll)n;i++)
#define all(v) v.begin(),v.end()
const ll INF = (ll)2e18;
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N, M;
cin >> N >> M;
string S;
cin >> S;
ll mod = 998244353;
vector<ll> A(M), B(M);
vector<vector<ll>> G(N);
vector<ll> cnt_i(N, 0);
vector<ll> cnt_a(N, 0);
vector<ll> cnt_question(N, 0);
rep(i,M){
cin >> A[i] >> B[i];
A[i]--;
B[i]--;
G[A[i]].push_back(B[i]);
G[B[i]].push_back(A[i]);
if(S[A[i]]=='a'){
cnt_a[B[i]]++;
}
else if(S[A[i]]=='i'){
cnt_i[B[i]]++;
}
else if(S[A[i]]=='?'){
cnt_question[B[i]]++;
}
if(S[B[i]]=='a'){
cnt_a[A[i]]++;
}
else if(S[B[i]]=='i'){
cnt_i[A[i]]++;
}
else if(S[B[i]]=='?'){
cnt_question[A[i]]++;
}
}
ll q = 0;
rep(i,N){
if(S[i]=='?'){
q++;
}
}
// rep(i,N){
// cout << cnt_a[i] << ' ';
// }
// cout << endl;
// rep(i,N){
// cout << cnt_i[i] << ' ';
// }
// cout << endl;
// rep(i,N){
// cout << cnt_question[i] << ' ';
// }
// cout << endl;
ll ans = 0;
rep(i,N){
if(S[i]=='o'||S[i]=='?'){
ll x = cnt_a[i];
ll y = cnt_i[i];
ll z = cnt_question[i];
//ll sum = x*((y+z)*(z+1)%mod-z)%mod;
ll sum = 0;
sum = (sum + mod) % mod;
rep(b,z+1){
ll tmp = 0;
tmp += (x * (y + z - b) % mod * (z - b+1) % mod + (-x + y + z - b) * (z - b) % mod * (z - b + 1) % mod * inv_mod(2, mod) % mod)%mod - inv_mod(6, mod) * (z - b) % mod * (z - b + 1) % mod * (2 * (z - b) + 1) % mod;
tmp = (tmp%mod + mod) % mod;
tmp += (z - b) * (z - b + 1) % mod * (z - b - 1) % mod * inv_mod(6, mod) % mod;
tmp = (tmp%mod + mod) % mod;
sum = (sum + tmp) % mod;
}
sum = (sum % mod + mod) % mod;
sum = sum * pow_mod(26, q - z - (S[i] == '?'), mod) % mod;
ans += sum;
ans %= mod;
ans = (ans%mod + mod) % mod;
}
}
cout << ans << endl;
}
it_is_a_pity_