| 提出番号 | 1202 |
|---|---|
| 提出者 | square1001 |
| 言語 | C++ |
| 提出日時 | 2018-05-18 21:10:10 |
| 問題名 | (51)boat(ボート) |
| 結果 | AC |
| 点数 | 100% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 100% | 12ms | 20528KB |
| 2 | AC | 100% | 11ms | 20528KB |
| 3 | AC | 100% | 13ms | 20512KB |
| 4 | AC | 100% | 12ms | 20528KB |
| 5 | AC | 100% | 12ms | 20528KB |
| 6 | AC | 100% | 13ms | 20528KB |
| 7 | AC | 100% | 12ms | 20544KB |
| 8 | AC | 100% | 12ms | 20528KB |
| 9 | AC | 100% | 10ms | 20528KB |
| 10 | AC | 100% | 12ms | 20528KB |
| 11 | AC | 100% | 13ms | 20544KB |
| 12 | AC | 100% | 11ms | 20528KB |
| 13 | AC | 100% | 12ms | 20544KB |
| 14 | AC | 100% | 11ms | 20528KB |
| 15 | AC | 100% | 12ms | 20528KB |
| 16 | AC | 100% | 7ms | 13952KB |
| 17 | AC | 100% | 6ms | 14048KB |
| 18 | AC | 100% | 6ms | 14016KB |
| 19 | AC | 100% | 7ms | 14064KB |
| 20 | AC | 100% | 5ms | 14016KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 21 | AC | 100% | 227ms | 19808KB |
| 22 | AC | 100% | 217ms | 19904KB |
| 23 | AC | 100% | 204ms | 19776KB |
| 24 | AC | 100% | 218ms | 19712KB |
| 25 | AC | 100% | 217ms | 19760KB |
| 26 | AC | 100% | 313ms | 19504KB |
| 27 | AC | 100% | 281ms | 19552KB |
| 28 | AC | 100% | 319ms | 19680KB |
| 29 | AC | 100% | 315ms | 19552KB |
| 30 | AC | 100% | 274ms | 19520KB |
| 31 | AC | 100% | 13ms | 20496KB |
| 32 | AC | 100% | 13ms | 20512KB |
| 33 | AC | 100% | 14ms | 20496KB |
| 34 | AC | 100% | 13ms | 20512KB |
| 35 | AC | 100% | 14ms | 20496KB |
| 36 | AC | 100% | 12ms | 20512KB |
| 37 | AC | 100% | 13ms | 20496KB |
| 38 | AC | 100% | 13ms | 20496KB |
| 39 | AC | 100% | 12ms | 20480KB |
| 40 | AC | 100% | 13ms | 20480KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 41 | AC | 100% | 4ms | 8032KB |
| 42 | AC | 100% | 4ms | 8416KB |
| 43 | AC | 100% | 4ms | 8240KB |
| 44 | AC | 100% | 4ms | 8464KB |
| 45 | AC | 100% | 4ms | 8384KB |
| 46 | AC | 100% | 5ms | 8016KB |
| 47 | AC | 100% | 5ms | 8416KB |
| 48 | AC | 100% | 4ms | 8704KB |
| 49 | AC | 100% | 5ms | 7840KB |
| 50 | AC | 100% | 4ms | 8704KB |
| 51 | AC | 100% | 4ms | 8432KB |
| 52 | AC | 100% | 4ms | 7840KB |
| 53 | AC | 100% | 3ms | 8352KB |
| 54 | AC | 100% | 4ms | 7840KB |
| 55 | AC | 100% | 4ms | 8048KB |
| 56 | AC | 100% | 4ms | 7248KB |
| 57 | AC | 100% | 3ms | 7744KB |
| 58 | AC | 100% | 3ms | 7792KB |
| 59 | AC | 100% | 3ms | 7792KB |
| 60 | AC | 100% | 3ms | 7520KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 61 | AC | 100% | 222ms | 20528KB |
| 62 | AC | 100% | 236ms | 20528KB |
| 63 | AC | 100% | 204ms | 20528KB |
| 64 | AC | 100% | 243ms | 20528KB |
| 65 | AC | 100% | 241ms | 20528KB |
| 66 | AC | 100% | 359ms | 20528KB |
| 67 | AC | 100% | 359ms | 20528KB |
| 68 | AC | 100% | 356ms | 20544KB |
| 69 | AC | 100% | 319ms | 20544KB |
| 70 | AC | 100% | 355ms | 20528KB |
| 71 | AC | 100% | 170ms | 20528KB |
| 72 | AC | 100% | 186ms | 20512KB |
| 73 | AC | 100% | 185ms | 20528KB |
| 74 | AC | 100% | 193ms | 20528KB |
| 75 | AC | 100% | 199ms | 20528KB |
| 76 | AC | 100% | 51ms | 13984KB |
| 77 | AC | 100% | 48ms | 14016KB |
| 78 | AC | 100% | 51ms | 14016KB |
| 79 | AC | 100% | 51ms | 14016KB |
| 80 | AC | 100% | 51ms | 13984KB |
#include <iostream>
#include <algorithm>
using namespace std;
const int mod = 1000000007;
int n, c, a[509], b[509], x[1009], inv[509], comb[1009][509], dp[509][1009];
int main() {
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i] >> b[i];
x[i] = a[i];
x[i + n] = ++b[i];
}
sort(x, x + 2 * n);
c = unique(x, x + 2 * n) - x;
for (int i = 0; i < n; ++i) {
a[i] = lower_bound(x, x + c, a[i]) - x;
b[i] = lower_bound(x, x + c, b[i]) - x;
}
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = 1LL * inv[mod % i] * (mod - mod / i) % mod;
}
for (int i = 0; i < c - 1; ++i) {
int way = 1;
for (int j = 1; j <= n; ++j) {
way = 1LL * way * (x[i + 1] - x[i] + j - 1) % mod * inv[j] % mod;
comb[i][j] = way;
if (comb[i][j] >= mod) comb[i][j] -= mod;
}
}
int ans = 0;
for (int i = 0; i < n; ++i) {
for (int j = a[i]; j < b[i]; ++j) {
int num = 0;
for (int k = i - 1; k >= 0; --k) {
if (a[k + 1] <= j && j < b[k + 1]) ++num;
dp[i][j + 1] = (dp[i][j + 1] + 1LL * comb[j][num] * dp[k][j]) % mod;
}
if (a[0] <= j && j < b[0]) ++num;
dp[i][j + 1] += comb[j][num];
if (dp[i][j + 1] >= mod) dp[i][j + 1] -= mod;
}
for (int j = 0; j < c - 1; ++j) {
dp[i][j + 1] += dp[i][j];
if (dp[i][j + 1] >= mod) dp[i][j + 1] -= mod;
}
ans += dp[i][c - 1];
if (ans >= mod) ans -= mod;
}
cout << ans << '\n';
return 0;
}