QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#714704 | #9536. Athlete Welcome Ceremony | ucup-team1766 | WA | 0ms | 13944kb | C++20 | 3.1kb | 2024-11-06 03:20:25 | 2024-11-06 03:20:27 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define pb push_back
#define f first
#define s second
#define pll pair<ll, ll>
#define pii pair<int, int>
const int MOD = 1e9+7;
const int N = 300;
int dp[N+1][N+1][N+1][3];
int vals[N+1][N+1][N+1];
int pref[N+2][N+2][N+2];
int main(){
cin.tie(0), ios::sync_with_stdio(0);
int n, q;
cin >> n >> q;
string str;
cin >> str;
if(str[0] == 'a'){
dp[1][0][0][0] = 1;
}else if(str[0] == 'b'){
dp[1][0][0][1] = 1;
}
else if(str[0] == 'c'){
dp[1][0][0][2] = 1;
}else{
dp[1][1][0][0] = 1;
dp[1][0][1][1] = 1;
dp[1][0][0][2] = 1;
}
for(int i = 2; i <= n; i++){
char c = str[i-1];
for(int j = 0; j <= n; j++){
for(int k = 0; k <= n; k++){
if(c == 'a'){
dp[i][j][k][0] = (dp[i-1][j][k][1] + dp[i-1][j][k][2])%MOD;
}else if(c == 'b'){
dp[i][j][k][1] = (dp[i-1][j][k][0] + dp[i-1][j][k][2])%MOD;
}else if(c == 'c'){
dp[i][j][k][2] = (dp[i-1][j][k][0] + dp[i-1][j][k][1])%MOD;
}else{
if (j) dp[i][j][k][0] = (dp[i-1][j-1][k][1] + dp[i-1][j-1][k][2])%MOD;
if (k) dp[i][j][k][1] = (dp[i-1][j][k-1][0] + dp[i-1][j][k-1][2])%MOD;
dp[i][j][k][2] = (dp[i-1][j][k][0] + dp[i-1][j][k][1])%MOD;
}
}
}
}
int ques = count(str.begin(),str.end(),'?');
for (int a = 0; a <= n; a++) for (int b = 0; b <= n; b++) {
if (0 <= ques-a-b and ques-a-b <= n) vals[a][b][ques-a-b] = accumulate(dp[n][a][b], dp[n][a][b]+3, 0ll) % MOD;
}
/*
for (int i = 1; i <= n; i++) for (int j = 0; j <= n; j++) for (int k = 0; k <= n; k++) {
pref[i][j][k] = (pref[i][j][k] + pref[i-1][j][k]) % MOD;
}
for (int i = 0; i <= n; i++) for (int j = 1; j <= n; j++) for (int k = 0; k <= n; k++) {
pref[i][j][k] = (pref[i][j][k] + pref[i][j-1][k]) % MOD;
}
for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) for (int k = 1; k <= n; k++) {
pref[i][j][k] = (pref[i][j][k] + pref[i][j][k-1]) % MOD;
}
*/
/*
for (int i = 0; i <= n; i++){
for (int j = 0; j <= n; j++){
for (int k = 0; k <= n; k++) {
cout << vals[i][j][k] << " ";
}
cout << "\n";
}
cout << "\n";
}
*/
for (int i = 1; i <= n+1; i++){
for (int j = 1; j <= n+1; j++){
for (int k = 1; k <= n+1; k++) {
ll val = (ll)vals[i-1][j-1][k-1] + pref[i-1][j][k] + pref[i][j-1][k] + pref[i][j][k-1] - pref[i-1][j-1][k] - pref[i-1][j][k-1] - pref[i][j-1][k-1] + pref[i-1][j-1][k-1];
pref[i][j][k] = (val+8*MOD) % MOD;
}
}
}
/*
for (int i = 0; i <= n; i++){
for (int j = 0; j <= n; j++){
for (int k = 0; k <= n; k++) {
cout << pref[i][j][k] << " ";
}
cout << "\n";
}
cout << "\n";
}
*/
while (q--) {
int x, y, z; cin >> x >> y >> z;
cout << pref[x+1][y+1][z+1] << '\n';
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 13944kb
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2
output:
71767643 -719476259 -539607194
result:
wrong answer 1st lines differ - expected: '3', found: '71767643'