QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#714663 | #9536. Athlete Welcome Ceremony | ucup-team1766 | RE | 0ms | 0kb | C++20 | 3.4kb | 2024-11-06 01:58:41 | 2024-11-06 01:58:44 |
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+1][N+1][N+1];
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 = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
ll val = (ll)vals[i][j][0] + pref[i-1][j][0] + pref[i][j-1][0] - pref[i-1][j-1][0];
pref[i][j][0] = val % MOD;
}
}
for(int j = 1; j <= n; j++){
for(int k = 1; k <= n; k++){
ll val = (ll)vals[0][j][k] + pref[0][j][k-1] + pref[0][j-1][k] - pref[0][j-1][k-1];
pref[0][j][k] = val % MOD;
}
}
for(int i = 1; i <= n; i++){
for(int k = 1; k <= n; k++){
ll val = (ll)vals[i][0][k] + pref[i][0][k-1] + pref[i-1][0][k] - pref[i-1][0][k-1];
pref[1][0][k] = val % MOD;
}
}
for (int i = 0; i <= n; i++){
for (int j = 0; j <= n; j++){
for (int k = 0; k <= n; k++) {
ll val = (ll)vals[i][j][k] + 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 % 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][y][z] << '\n';
}
}
詳細信息
Test #1:
score: 0
Runtime Error
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2