結果
問題 | No.801 エレベーター |
ユーザー |
![]() |
提出日時 | 2019-03-18 15:44:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 204 ms / 2,000 ms |
コード長 | 1,687 bytes |
コンパイル時間 | 1,110 ms |
コンパイル使用メモリ | 114,832 KB |
実行使用メモリ | 73,728 KB |
最終ジャッジ日時 | 2024-07-18 10:25:56 |
合計ジャッジ時間 | 4,923 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
/* ---------- STL Libraries ---------- */// IO library#include <cstdio>#include <fstream>#include <iomanip>#include <ios>#include <iostream>// algorithm library#include <algorithm>#include <cmath>#include <numeric>#include <random>#include <cstring>// container library#include <array>#include <bitset>#include <deque>#include <map>#include <unordered_map>#include <queue>#include <set>#include <string>#include <tuple>#include <vector>#include <stack>/* ---------- Namespace ---------- */using namespace std;/* ---------- Type ---------- */using ll = long long;#define int ll#define P pair<ll, ll>/* ---------- Constants */const double PI = 3.141592653589793238462643383279;const ll MOD = 1e9 + 7;const int INF = 1LL << 55;/* v-v-v-v-v-v-v-v-v Main Part v-v-v-v-v-v-v-v-v */signed main() {// dp[i][j]: i回の移動でj階に移動する場合の数// [dp[i+1][Li], dp[i+1][Ri]] <- [dp[i][Li], dp[i][Ri]]int N, M, K;cin >> N >> M >> K;vector<int> L(M);vector<int> R(M);for (int i = 0; i < M; i++) {cin >> L[i] >> R[i];L[i]--; R[i]--;}vector<vector<int>> dp(K + 1, vector<int>(N + 1, 0));dp[0][0] = 1;for (int i = 0; i < K; i++) {vector<int> S(N + 1, 0);for (int j = 0; j < N; j++) (S[j + 1] = S[j] + dp[i][j]) %= MOD;for (int j = 0; j < M; j++) {int s = (S[R[j] + 1] - S[L[j]] + MOD) % MOD;(dp[i+1][R[j] + 1] += -s + MOD) %= MOD;(dp[i+1][L[j]] += s) %= MOD;}for (int j = 0; j < N; j++) (dp[i+1][j+1] += dp[i+1][j]) %= MOD;}cout << dp[K][N - 1] << endl;return 0;}