結果
問題 | No.1542 ぽんぽんぽん ぽんぽんぽんぽん ぽんぽんぽん |
ユーザー |
👑 |
提出日時 | 2021-06-06 19:21:32 |
言語 | C (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,604 bytes |
コンパイル時間 | 940 ms |
コンパイル使用メモリ | 32,724 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-23 05:38:45 |
合計ジャッジ時間 | 14,076 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 4 WA * 26 |
ソースコード
#include <stdio.h>void chmax(int* a, int b){if (*a < b) *a = b;}int count(char S[]){int i, j, k, l, dp[2][501][501], q[2][250001][2], head, tail, cur, prev, tmp;for (l = 0; S[l] != 0; l++);for (i = 0; i <= l; i++) {for (j = 0; j <= l; j++) {dp[0][i][j] = -1;dp[1][i][j] = -1;}}dp[1][0][0] = 0;q[1][0][0] = 0;q[1][0][1] = 0;tail = 1;for (k = 0, cur = 0, prev = 1; k < l; k++, cur ^= 1, prev ^= 1) {for (head = tail - 1, tail = 0; head >= 0; head--) {i = q[prev][head][0];j = q[prev][head][1];tmp = dp[prev][i][j];dp[prev][i][j] = -1;if (S[k] == 'p') {if (j == 0) {if (dp[cur][i+1][j] == -1) {q[cur][tail][0] = i + 1;q[cur][tail++][1] = j;}chmax(&(dp[cur][i+1][j]), tmp);} else {if (j % 2 == 0) {if (dp[cur][i][j+1] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j + 1;}chmax(&(dp[cur][i][j+1]), tmp);}if (dp[cur][i][j] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j;}chmax(&(dp[cur][i][j]), tmp);}} else if (S[k] == 'o') {if (j % 2 != 0) {if (dp[cur][i][j+1] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j + 1;}chmax(&(dp[cur][i][j+1]), tmp);} else {if (i > 0 && j == 0) {if (dp[cur][i-1][j+2] == -1) {q[cur][tail][0] = i - 1;q[cur][tail++][1] = j + 2;}chmax(&(dp[cur][i-1][j+2]), tmp);}if (dp[cur][i][j] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j;}chmax(&(dp[cur][i][j]), tmp);}} else {if (j > 0 && j % 2 == 0) {if (dp[cur][i][j-2] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j - 2;}chmax(&(dp[cur][i][j-2]), tmp + 1);} else {if (j > 0) {if (dp[cur][i][j-3] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j - 3;}chmax(&(dp[cur][i][j-3]), tmp + 1);}if (dp[cur][i][j] == -1) {q[cur][tail][0] = i;q[cur][tail++][1] = j;}chmax(&(dp[cur][i][j]), tmp);}}}}int ans = 0;for (head = 0; head < tail; head++) {i = q[prev][head][0];j = q[prev][head][1];chmax(&ans, dp[prev][i][j]);}return ans;}int main(){int N;char S[501];scanf("%d", &N);scanf("%s", S);int i, j, k, ans = -1;char c;for (i = 3; i < N - 2; i++) {c = S[i];S[i] = 0;j = count(S);S[i] = c;k = count(&(S[i]));if (j >= 1 && k >= 1) chmax(&ans, j + k - 2);}printf("%d\n", ans);fflush(stdout);return 0;}