結果
| 問題 |
No.3096 Snake Path
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-05 18:35:16 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,608 bytes |
| コンパイル時間 | 28,020 ms |
| コンパイル使用メモリ | 359,308 KB |
| 実行使用メモリ | 17,336 KB |
| 最終ジャッジ日時 | 2025-03-05 18:35:51 |
| 合計ジャッジ時間 | 31,228 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 7 TLE * 1 -- * 23 |
ソースコード
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
using mint = modint998244353;
constexpr ll mod = 998244353;
using MINT = modint1000000007;
constexpr ll MOD = 1000000007;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
template <typename T>
void print(vector<T> A);
int main()
{
ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int N, K;
cin >> N >> K;
vector<vector<vector<mint>>> dp(
N+1, vector<vector<mint>>(3, vector<mint>(K + 1, 0)));
dp[0][0][0] = 1;
for (int i = 0; i < N; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k <= K; k++) {
for (int nj = 0; nj < 3; nj++) {
int c = 1;
if (nj == 2 || i==N-1) {
c--;
}
if (k + c > K) {
continue;
}
dp[i + 1][nj][k + c] += dp[i][j][k];
if (j == 0 && nj == 2) {
for (int l = i + 2; l <= N; l++) {
if (k + (l - i - 1) * 2 > K) {
break;
}
dp[l][nj][k+(l-i-1)*2]+=dp[i][j][k];
}
}
if (j == 2 && nj == 0) {
for (int l = i + 2; l <= N; l++) {
if (l == N) {
if (k + (l - i - 1) * 2 > K) {
break;
}
dp[l][nj][k + (l - i - 1) * 2] += dp[i][j][k];
continue;
}
if (k + (l - i - 1) * 2+1 > K) {
break;
}
dp[l][nj][k+(l-i-1)*2+1]+=dp[i][j][k];
}
}
}
}
}
}
mint ans = 0;
int j = 0;
if (N % 2) {
j = 2;
}
for (int k = 0; k <= K; k++) {
ans+=dp[N][j][k];
}
cout<<ans.val()<<endl;
}
template <typename T>
void print(vector<T> A)
{
for (int i = 0; i < A.size() - 1; i++)
{
cout << A[i] << ' ';
}
cout << A[A.size() - 1] << endl;
return;
}