제출 #1312179

#제출 시각아이디문제언어결과실행 시간메모리
1312179HasanV11010238Boat (APIO16_boat)C++20
100 / 100
1010 ms10468 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 ll binpow(ll a, ll b){ ll res = 1; while (b != 0){ if (b % 2 == 1){ res *= a; res %= mod; b--; } else{ a *= a; a %= mod; b /= 2; } } return res; } vector<ll> f, inv; ll C(int n, int k){ if (k > n || k < 0) return 0; return f[n] * inv[k] % mod * inv[n - k] % mod; } int main(){ f.assign(1001, 1), inv.assign(1001, 1); for (ll i = 1; i <= 1000; i++){ f[i] = (f[i - 1] * i) % mod; inv[i] = binpow(f[i], mod - 2); } int n; cin>>n; vector<int> a(n + 1, 0), b(n + 1, 0); set<int> se; for (int i = 1; i <= n; i++){ cin>>a[i]>>b[i]; se.insert(a[i]); se.insert(b[i]); } int m = 0, la = -1; vector<vector<ll>> ran, pos; for (auto el : se){ if (la != -1 && la + 1 < el) ran.push_back({la + 1, el - 1}); ran.push_back({el, el}); la = el; } m = ran.size(); pos.assign(m, vector<ll>(n + 1, 0)); vector<vector<ll>> c(n + 1, vector<ll>(n + 1, 0)); for (int i = 0; i <= n; i++){ c[i][0] = c[i][i] = 1; for (int j = 1; j < i; j++){ c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod; } } for (int i = 0; i < m; i++){ vector<ll> co(n + 1, 0); ll cur = 1, sz = ran[i][1] - ran[i][0] + 1; for (int j = 1; j <= n; j++){ cur = (cur * (sz - j + 1)) % mod; cur = (cur * binpow(j, mod - 2)) % mod; co[j] = cur; } for (int j = 1; j <= n; j++){ for (int k = j; k <= n; k++){ pos[i][k] = (pos[i][k] + c[k - 1][j - 1] * co[j]) % mod; } } } vector<ll> dp(n + 1, 0); dp[0] = 1; for (int wh = 0; wh < m; wh++){ for (int i = n; i >= 1; i--){ if (!(a[i] <= ran[wh][0] && ran[wh][1] <= b[i])) continue; ll cn = 0; for (int j = i; j >= 1; j--){ if (a[j] <= ran[wh][0] && ran[wh][1] <= b[j]) cn++; dp[i] = (dp[i] + dp[j - 1] * pos[wh][cn]) % mod; } } } ll ans = 0; for (int i = 1; i <= n; i++){ ans = (ans + dp[i]) % mod; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...