結果
| 問題 |
No.398 ハーフパイプ(2)
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2024-12-19 20:09:44 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 414 ms / 2,000 ms |
| コード長 | 1,543 bytes |
| コンパイル時間 | 1,918 ms |
| コンパイル使用メモリ | 89,408 KB |
| 実行使用メモリ | 51,412 KB |
| 最終ジャッジ日時 | 2024-12-19 20:09:55 |
| 合計ジャッジ時間 | 10,246 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
inline int idx(int a, int b, int s) {
return (s * 101 + a) * 101 + b;
}
int main() {
double input;
cin >> input;
int X = static_cast<int>(input * 4);
const int MAX_A = 101;
const int MAX_B = 101;
const int MAX_S = 601;
const int M = MAX_A * MAX_B * MAX_S;
vector<int> dp(M, 0);
for (int x = 0; x < MAX_A; ++x) {
dp[idx(x, x, x)] = 1;
}
for (int step = 0; step < 5; ++step) {
vector<int> prev = dp;
fill(dp.begin(), dp.end(), 0);
for (int a = 0; a < MAX_A; ++a) {
for (int b = a; b < MAX_B; ++b) {
for (int s = 0; s < MAX_S; ++s) {
if (prev[idx(a, b, s)] > 0) {
for (int x = 0; x < MAX_A; ++x) {
int new_a = min(a, x);
int new_b = max(b, x);
int new_s = s + x;
if (new_s < MAX_S) {
dp[idx(new_a, new_b, new_s)] += prev[idx(a, b, s)];
}
}
}
}
}
}
}
long long ans = 0;
for (int a = 0; a < MAX_A; ++a) {
for (int b = 0; b < MAX_B; ++b) {
for (int s = 0; s < MAX_S; ++s) {
if (a + b + X == s) {
ans += dp[idx(a, b, s)];
}
}
}
}
cout << ans << endl;
return 0;
}
vwxyz