結果

問題 No.1011 Infinite Stairs
ユーザー hipotafhipotaf
提出日時 2020-06-06 03:02:35
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 325 ms / 2,000 ms
コード長 1,283 bytes
コンパイル時間 610 ms
コンパイル使用メモリ 70,044 KB
実行使用メモリ 4,380 KB
最終ジャッジ日時 2023-09-24 11:17:11
合計ジャッジ時間 2,962 ms
ジャッジサーバーID
(参考情報)
judge12 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,376 KB
testcase_01 AC 2 ms
4,380 KB
testcase_02 AC 6 ms
4,380 KB
testcase_03 AC 216 ms
4,376 KB
testcase_04 AC 37 ms
4,380 KB
testcase_05 AC 325 ms
4,376 KB
testcase_06 AC 1 ms
4,376 KB
testcase_07 AC 4 ms
4,376 KB
testcase_08 AC 1 ms
4,380 KB
testcase_09 AC 2 ms
4,376 KB
testcase_10 AC 3 ms
4,380 KB
testcase_11 AC 45 ms
4,376 KB
testcase_12 AC 3 ms
4,380 KB
testcase_13 AC 28 ms
4,380 KB
testcase_14 AC 2 ms
4,380 KB
testcase_15 AC 36 ms
4,376 KB
testcase_16 AC 150 ms
4,380 KB
testcase_17 AC 14 ms
4,380 KB
testcase_18 AC 87 ms
4,380 KB
testcase_19 AC 2 ms
4,376 KB
testcase_20 AC 2 ms
4,376 KB
testcase_21 AC 36 ms
4,376 KB
testcase_22 AC 71 ms
4,380 KB
testcase_23 AC 43 ms
4,380 KB
testcase_24 AC 47 ms
4,380 KB
testcase_25 AC 76 ms
4,376 KB
testcase_26 AC 16 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <string>
#include <vector>
#include <numeric>

using namespace std;

using ll = long long;

template <class T>
using grid = vector<vector<T>>;

#define REP(i,n) for(ll i=0;i<(ll)(n);i++)
#define REPD(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,a,b) for(ll i=a;i<=(ll)(b);i++)
#define FORD(i,a,b) for(ll i=a;i>=(ll)(b);i--)

#define input(...) __VA_ARGS__; in(__VA_ARGS__)

void print() {
  std::cout << std::endl;
}

template <class Head, class... Tail>
void print(Head&& head, Tail&&... tail) {
  std::cout << head << " ";
  print(std::forward<Tail>(tail)...);
}

void in() { }

template <class Head, class... Tail>
void in(Head&& head, Tail&&... tail) {
  cin >> head;
  in(std::forward<Tail>(tail)...);
}

ll MOD = 1'000'000'000 + 7;
ll mod(ll v) {
  if (v >= MOD) return v % MOD;
  return v % MOD;
}

int main() {
  ll input(N, d, K);

  vector<ll> dp(K + 1);
  REP(k, K + 1) { // n == 1 の時
    if (k <= 0) dp[k] = 0;
    else dp[k] = (int) k <= d;
  }

  vector<ll> cumsum(K + 1);
  REP(n, N - 1) { // [0, N - 1)
    partial_sum(dp.begin(), dp.end(), cumsum.begin());
    FORD(k, K, 1) { // [K, 1]
      dp[k] = mod(cumsum[k - 1] - cumsum[max(1ll, k - d) - 1]);
      // cumsum[a] - cumsum[b - 1] = sum(dp[b] ~ dp[a])
    }
  }

  print(dp[K]);
}
0