結果
| 問題 |
No.1759 Silver Tour
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2021-11-20 15:22:55 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| コード長 | 1,622 bytes |
| コンパイル時間 | 230 ms |
| コンパイル使用メモリ | 32,484 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-11 16:35:48 |
| 合計ジャッジ時間 | 1,649 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <stdio.h>
int Mod;
void DFS(int W, int i, int j, int l, int flag[][51], int adj[])
{
if (l == W * 2) {
adj[j]++;
return;
}
flag[i][j] = 1;
if (i == 0) {
if (j > 1 && flag[i+1][j-1] == 0) DFS(W, i + 1, j - 1, l + 1, flag, adj);
if (flag[i+1][j] == 0) DFS(W, i + 1, j, l + 1, flag, adj);
if (j < W && flag[i+1][j+1] == 0) DFS(W, i + 1, j + 1, l + 1, flag, adj);
} else {
if (j > 1 && flag[i-1][j-1] == 0) DFS(W, i - 1, j - 1, l + 1, flag, adj);
if (j < W && flag[i-1][j+1] == 0) DFS(W, i - 1, j + 1, l + 1, flag, adj);
}
flag[i][j] = 0;
}
int main()
{
int H, W, Mod;
scanf("%d %d %d", &H, &W, &Mod);
if (W == 1) {
printf("1\n");
fflush(stdout);
return 0;
} else if (H % 2 != 0) {
printf("0\n");
fflush(stdout);
return 0;
}
int i, j, k;
long long dp[2][52] = {}, tmp;
for (j = 1; j <= W; j++) dp[0][j] = 1;
for (i = 1; i <= H / 2; i++) {
for (j = 1; j <= W; j++) {
tmp = dp[0][j] % Mod;
dp[0][j] = 0;
if (tmp == 0) continue;
if (W % 2 == 0) {
if (j % 2 != 0) for (k = j + 1; k <= W; k += 2) dp[1][k] += tmp;
else for (k = j - 1; k >= 1; k -= 2) dp[1][k] += tmp;
} else {
if (j % 2 != 0) {
for (k = 1; k <= W; k += 2) dp[1][k] += tmp;
if (j != 1 && j != W) dp[1][j] -= tmp;
}
}
}
if (i == H / 2) break;
for (j = 1; j <= W; j++) {
tmp = dp[1][j] % Mod;
dp[1][j] = 0;
if (tmp == 0) continue;
if (j > 1) dp[0][j-1] += tmp;
dp[0][j] += tmp;
if (j < W) dp[0][j+1] += tmp;
}
}
long long ans = 0;
for (j = 1; j <= W; j++) ans += dp[1][j];
printf("%lld\n", ans % Mod);
fflush(stdout);
return 0;
}