QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#717929 | #9536. Athlete Welcome Ceremony | QF_love_younger_sister | WA | 537ms | 120964kb | C++23 | 4.0kb | 2024-11-06 19:18:03 | 2024-11-06 19:18:08 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=305;
const int mod=1e9+7;
int dp[N][N][N][4],dp2[N][N][N];
int n,q;
string s;
signed main(){
// ios::sync_with_stdio(0),cin.tie(0);
cin >> n >> q;
cin >> s;
if(s[0]=='?'){
dp[0][0][0][3]=1;
dp[0][0][1][2]=1;
dp[0][1][0][1]=1;
}
for(int i=2; i<=n; i++){
for(int j=0; j<=i; j++){
for(int k=0; j+k<=i; k++){
if(s[i-1]=='?'){
if(i-2>=0&&s[i-2]=='a'){
if(i<n && s[i]=='b'){
dp[i][j][k][3]=dp[i-1][j][k][0]%mod;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
}
else if(i<n && s[i]=='c'){
dp[i][j][k][2]=dp[i-1][j][k-1][0]%mod;
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
}
else{
dp[i][j][k][2]=dp[i-1][j][k][0];
dp[i][j][k][3]=dp[i-1][j][k-1][0];
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
}
continue;
}
if(i-2>=0&&s[i-2]=='b'){
if(i<n && s[i]=='a'){
dp[i][j][k][3]=dp[i-1][j][k][0]%mod;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
}
else if(i<n && s[i]=='c'){
dp[i][j][k][1]=dp[i-1][j-1][k][0]%mod;
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
}
else{
dp[i][j][k][1]=dp[i-1][j][k][0];
dp[i][j][k][3]=dp[i-1][j-1][k][0];
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
}
continue;
}
if(i-2>=0&&s[i-2]=='c'){
if(i<n && s[i]=='a'){
dp[i][j][k][2]=dp[i-1][j][k-1][0];
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
}
else if(i<n && s[i]=='b'){
dp[i][j][k][1]=dp[i-1][j-1][k][0];
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
}
else{
dp[i][j][k][1]=dp[i-1][j][k-1][0];
dp[i][j][k][2]=dp[i-1][j-1][k][0];
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
}
continue;
}
if(i-2>=0){
if(i<n && s[i]=='a'){
dp[i][j][k][2]=dp[i-1][j][k-1][3];
dp[i][j][k][3]=dp[i-1][j][k][2];
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
continue;
}
else if(i<n && s[i]=='b'){
dp[i][j][k][1]=dp[i-1][j-1][k][3];
dp[i][j][k][3]=dp[i-1][j][k][1];
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
continue;
}
else if(i<n && s[i]=='c'){
dp[i][j][k][1]=dp[i-1][j-1][k][2];
dp[i][j][k][2]=dp[i-1][j][k-1][1];
if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
continue;
}
dp[i][j][k][1]=dp[i-1][j-1][k][1]+dp[i-1][j-1][k][2]+dp[i-1][j-1][k][3];
dp[i][j][k][2]=dp[i-1][j][k-1][1]+dp[i-1][j][k-1][2]+dp[i-1][j][k-1][3];
dp[i][j][k][3]=dp[i-1][j][k][1]+dp[i-1][j][k][2]+dp[i-1][j][k][3];
}
}
else{
dp[i][j][k][0]=dp[i-1][j][k][0]+dp[i-1][j-1][k][1]+dp[i-1][j][k][2]+dp[i-1][j][k-1][3];
}
// cout << dp[i][j][k][0] << dp[i][j][k][1] << dp[i][j][k][2] << dp[i][j][k][3] << " " << i << ' ' << j << ' ' << k <<endl;
}
}
}
//全部向左平移了一个单位
for(int i=0; i<=n; i++){
for(int j=0; i+j<=n; j++){
dp2[i+1][j+1][n+1-i-j]=dp[n][i][j][0]+dp[n][i][j][1]+dp[n][i][j][2]+dp[n][i][j][3];
}
}
for(int i=1; i<=301; i++){
for(int j=1; j<=301; j++){
for(int k=1; k<=301; k++){
dp2[i][j][k]=(((((((dp2[i-1][j][k]+dp2[i][j-1][k])%mod+dp2[i][j][k-1])%mod+mod-dp2[i-1][j-1][k])%mod+mod-dp2[i-1][j][k-1])%mod+mod-dp2[i][j-1][k-1])%mod+dp2[i-1][j-1][k-1])%mod+dp2[i][j][k])%mod;
}
}
}
// for(int i=1; i<=3; i++){
for(int j=0; j<=3; j++){
for(int k=0; k<=3; k++){
// cout << dp[n][j][k][0] << dp[n][j][k][1] << dp[n][j][k][2] << dp[n][j][k][3] << ' ' << j << ' ' << k <<endl;
}
}
// }
cout << "\n";
while(q--){
int a,b,c;
cin >> a >> b >> c;
cout << dp2[a+1][b+1][c+1] << "\n";
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 537ms
memory: 120964kb
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2
output:
2 0 0
result:
wrong answer 1st lines differ - expected: '3', found: ''