結果

問題 No.3040 Aoiスコア
ユーザー Leal-0
提出日時 2025-02-28 23:09:03
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 4 ms / 1,000 ms
コード長 1,386 bytes
コンパイル時間 1,340 ms
コンパイル使用メモリ 169,060 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-06-20 21:01:03
合計ジャッジ時間 2,164 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

#ifndef INCLUDED_MAIN
#define INCLUDED_MAIN

#include __FILE__
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	ll n,m;
	cin>>n>>m;
	string s;
	cin>>s;
	vector<vector<ll>> deps(n);
	rep(i,m){
		ll a,b;
		cin>>a>>b;
		a--;b--;
		deps[a].push_back(b);
		deps[b].push_back(a);
	}
	ll global_q=0;
	for(auto ch:s){
		if(ch=='?')global_q++;
	}
	ll aoi=0;
	rep(v,n){
		if(s[v]!='o'&&s[v]!='?')continue;
		int f2=(s[v]=='?'?1:0);
		ll countA=0,countI=0,countU=0;
		for(auto u:deps[v]){
			char c=s[u];
			if(c=='a'){
				countA++;
			}else if(c=='i'){
				countI++;
			}else if(c=='?'){
				countU++;
			}
		}
		ll cont=0;
		cont=((countA*countI)%mod*modpow(26,global_q-f2,1))%mod;
		cont=(cont+(((countA*countU+countU*countI)%mod*modpow(26,global_q-(f2+1),1))%mod))%mod;
		if(countU>=2){
			cont=(cont+(((countU*(countU-1))%mod*modpow(26,global_q-(f2+2),1))%mod))%mod;
		}
		aoi=(aoi+cont)%mod;
	}
	cout<<aoi%mod<<"\n";
	return 0;
}
#else
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define srep(i,l,r) for(int i=l;i<=r;i++)
using ll=long long;
const ll mod=998244353;
#define INF 922330000000000000ll
ll modpow(ll base,ll exp,ll mode){
	ll result=1;
	if(mode==0){
		rep(i,exp)result*=base;
	}else{
		base%=mod;
		while(exp>0){
			if(exp&1)
				result=(result*base)%mod;
			base=(base*base)%mod;
			exp>>=1;
		}
	}
	return result;
}
#endif
0