QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#756369 | #9536. Athlete Welcome Ceremony | Stelor | TL | 0ms | 0kb | C++17 | 3.1kb | 2024-11-16 20:09:20 | 2024-11-16 20:09:22 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int mod=1e9+7;
ll dp[310][310][310][3];
ll pre[310][310][310];
int cnt[3];
void solve(){
int n,q;
cin >> n >> q;
string s;
cin >> s;
s="#"+s;
for(int i=1;i<=n;++i){
cnt[i]=cnt[i-1]+(s[i]=='?');
}
if(s[1]=='?'){
dp[1][1][0][0]=dp[1][0][1][1]=dp[1][0][0][2]=1;
}else{
dp[1][0][0][s[1]-'a']=1;
}
for(int i=2;i<=n;++i){
for(int j=0;j<=cnt[i];++j){
for(int k=0;j+k<=cnt[i];++k){
if(s[i]!='?'){
ll tmp=dp[i-1][j][k][0]+dp[i-1][j][k][1]+dp[i-1][j][k][2];
dp[i][j][k][s[i]-'a']+=tmp-dp[i-1][j][k][s[i]-'a'];
dp[i][j][k][s[i]-'a']%=mod;
}else{
if(j>=1){
dp[i][j][k][0]+=dp[i-1][j-1][k][1];
dp[i][j][k][0]+=dp[i-1][j-1][k][2];
dp[i][j][k][0]%=mod;
}
if(k>=1){
dp[i][j][k][1]+=dp[i-1][j][k-1][0];
dp[i][j][k][1]+=dp[i-1][j][k-1][2];
dp[i][j][k][1]%=mod;
}
if(cnt[i]-j-k>=1){
dp[i][j][k][2]+=dp[i-1][j][k][0];
dp[i][j][k][2]+=dp[i-1][j][k][1];
dp[i][j][k][2]%=mod;
}
}
}
}
}
for(int i=0;i<=cnt[n];++i){
for(int j=0;i+j<=cnt[n];++j){
pre[i][j][cnt[n]-i-j]=dp[n][i][j][0]+dp[n][i][j][1]+dp[n][i][j][2];
pre[i][j][cnt[n]-i-j]%=mod;
}
}
for(int i=0;i<=300;++i){
for(int j=0;j<=300;++j){
for(int k=0;k<=300;++k){
if(i>=1){
pre[i][j][k]+=pre[i-1][j][k];
pre[i][j][k]%=mod;
}
if(j>=1){
pre[i][j][k]+=pre[i][j-1][k];
pre[i][j][k]%=mod;
}
if(k>=1){
pre[i][j][k]+=pre[i][j][k-1];
pre[i][j][k]%=mod;
}
if(i>=1&&j>=1){
pre[i][j][k]-=pre[i-1][j-1][k];
pre[i][j][k]+=mod;
pre[i][j][k]%=mod;
}
if(i>=1&&k>=1){
pre[i][j][k]-=pre[i-1][j][k-1];
pre[i][j][k]+=mod;
pre[i][j][k]%=mod;
}
if(k>=1&&j>=1){
pre[i][j][k]-=pre[i][j-1][k-1];
pre[i][j][k]+=mod;
}
if(i>=1&&j>=1&&k>=1){
pre[i][j][k]+=pre[i-1][j-1][k-1];
pre[i][j][k]%=mod;
}
}
}
}
while(q--){
int a,b,c;
cin >> a >> b >> c;
cout<<pre[a][b][c]<<'\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2