This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define nl "\n"
#define nf endl
#define ll long long
#define pb push_back
#define _ << ' ' <<
#define INF (ll)1e18
#define mod 1000000007
#define maxn 2010
ll i, i1, j, k, k1, t, n, m, res, flag[10], a[maxn], b[maxn];
ll ps1[maxn][maxn], ps2[maxn][maxn], nv[maxn], l, r, dp, ln;
vector<ll> cm;
map<ll, ll> dc;
ll fxp(ll b, ll e) {
ll r;
if (e == 0) return 1;
if (e % 2) {
r = fxp(b, e - 1); return (b * r) % mod;
} else {
r = fxp(b, e / 2); return (r * r) % mod;
}
}
ll inv(ll x) {
return fxp(x, mod - 2);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
#if !ONLINE_JUDGE && !EVAL
ifstream cin("input.txt");
ofstream cout("output.txt");
#endif
for (i = 1; i < maxn; i++) nv[i] = inv(i);
cin >> n; cm.pb(-1); cm.pb(0);
for (i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
cm.pb(a[i] - 1); cm.pb(a[i]); cm.pb(b[i] - 1); cm.pb(b[i]);
}
sort(cm.begin(), cm.end());
cm.resize(unique(cm.begin(), cm.end()) - cm.begin());
for (i = 0; i < cm.size(); i++) dc[cm[i]] = i;
for (i = 0; i <= n; i++) {
a[i] = dc[a[i]]; b[i] = dc[b[i]];
}
// for (i = 0; i <= n; i++) cout << a[i] _ b[i] << nl;
for (i = 0; i <= n; i++) {
l = a[i]; r = b[i];
for (j = 0; j <= 4 * n + 1; j++) {
if (j >= l && j <= r) {
ln = cm[j] - cm[j - 1];
for (k = n; k >= 1; k--) {
if (i == 0) {
if (j == 1 && k == 1) dp = 1;
} else {
if (k == 1) dp = (ps1[i - 1][j - 1] * ln) % mod;
else dp = (((ps2[j][k - 1] * (ln - k + 1)) % mod) * nv[k]) % mod;
}
ps1[i][j] = (ps1[i][j] + dp) % mod;
ps2[j][k] = (ps2[j][k] + dp) % mod;
// if (dp != 0) cout << i _ j _ k _ dp << nl;
}
} else {
dp = 0;
}
if (i >= 1) ps1[i][j] += ps1[i - 1][j];
if (j >= 1) ps1[i][j] += ps1[i][j - 1];
if (i >= 1 && j >= 1) ps1[i][j] -= ps1[i - 1][j - 1];
ps1[i][j] = (ps1[i][j] + mod) % mod;
}
}
cout << (ps1[n][4 * n + 1] + mod - 1) % mod << nl;
return 0;
}
Compilation message (stderr)
boat.cpp: In function 'int main()':
boat.cpp:53:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | for (i = 0; i < cm.size(); i++) dc[cm[i]] = i;
| ~~^~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |