結果
| 問題 | No.3040 Aoiスコア |
| コンテスト | |
| ユーザー |
Nauclhlt🪷
|
| 提出日時 | 2025-01-31 19:56:39 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 143 ms / 1,000 ms |
| コード長 | 1,606 bytes |
| 記録 | |
| コンパイル時間 | 2,056 ms |
| コンパイル使用メモリ | 200,908 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-06-20 20:54:59 |
| 合計ジャッジ時間 | 3,024 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
{
int N, M;
cin >> N >> M;
string S;
cin >> S;
assert(1 <= N && N <= 6000);
assert(0 <= M && M <= 6000);
assert(S.size() == N);
const ll MOD = 998244353LL;
vector<ll> power26(N + 1);
power26[0] = 1LL;
for (int i = 1; i <= N; i++)
{
power26[i] = (power26[i - 1] * 26LL) % MOD;
}
vector<vector<int>> g(N, vector<int>());
for (int i = 0; i < M; i++)
{
int a, b;
cin >> a >> b;
assert(1 <= a && a <= N);
assert(1 <= b && b <= N);
assert(a < b);
a--;
b--;
g[a].push_back(b);
g[b].push_back(a);
}
ll q = 0;
for (int i = 0; i < N; i++)
{
if (S[i] == '?')
{
q++;
}
}
ll ans = 0;
for (int i = 0; i < N; i++)
{
vector<int>& n = g[i];
if (S[i] == 'o' || S[i] == '?')
{
for (int j = 0; j < n.size(); j++)
{
for (int k = 0; k < n.size(); k++)
{
if (j == k) continue;
ll c = 0;
if (S[n[j]] == '?') c++;
else if (S[n[j]] != 'a') continue;
if (S[n[k]] == '?') c++;
else if (S[n[k]] != 'i') continue;
if (S[i] == '?') c++;
ans += power26[q - c];
ans %= MOD;
}
}
}
}
cout << ans << endl;
}
Nauclhlt🪷