結果
| 問題 |
No.801 エレベーター
|
| コンテスト | |
| ユーザー |
tempura_pp
|
| 提出日時 | 2019-03-14 04:02:11 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 205 ms / 2,000 ms |
| コード長 | 760 bytes |
| コンパイル時間 | 689 ms |
| コンパイル使用メモリ | 70,272 KB |
| 実行使用メモリ | 74,496 KB |
| 最終ジャッジ日時 | 2024-06-25 00:45:49 |
| 合計ジャッジ時間 | 5,275 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include<iostream>
#include<vector>
#include<assert.h>
using namespace std;
#define REP(i,m,n) for(int i=(int)(m) ; i < (int) (n) ; ++i )
#define rep(i,n) REP(i,0,n)
typedef long long ll;
const ll mod=1e9+7 ;
ll dp[3030][3030];
int main(){
int n,m,k;
cin>>n>>m>>k;
assert(1<=n&&n<=3000);
assert(1<=m&&m<=3000);
assert(1<=k&&k<=3000);
vector<pair<int,int>> v(m);
for(auto &p :v){
cin>>p.first>>p.second;
assert(1<=p.first&&p.first<=p.second&&p.second<=n);
}
dp[0][1]=1;
rep(i,k){
rep(j,n)(dp[i][j+1]+=dp[i][j])%=mod;
for(auto p : v){
dp[i+1][p.first]+=dp[i][p.second]-dp[i][p.first-1]+mod;
dp[i+1][p.second+1]+=-dp[i][p.second]+dp[i][p.first-1]+mod;
}
rep(j,n)(dp[i+1][j+1]+=dp[i+1][j])%=mod;
}
cout<<dp[k][n]<<endl;
return 0;
}
tempura_pp