Submission #230108

#TimeUsernameProblemLanguageResultExecution timeMemory
230108lycBoat (APIO16_boat)C++14
100 / 100
655 ms2480 KiB
#include <bits/stdc++.h> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for (int i=(a);i>=(b);--i) const int MX_N = 505; const int MOD = 1e9+7; int N, A[MX_N], B[MX_N]; vector<int> val; int inv[MX_N]; int f[MX_N][2*MX_N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; FOR(i,1,N){ cin >> A[i] >> B[i]; B[i] += 1; val.push_back(A[i]); val.push_back(B[i]); } sort(ALL(val)); val.resize(unique(ALL(val))-val.begin()); FOR(i,1,N){ A[i] = lower_bound(ALL(val),A[i])-val.begin(); B[i] = lower_bound(ALL(val),B[i])-val.begin(); } inv[1] = 1; FOR(i,2,N) inv[i] = (long long) (MOD-MOD/i) * inv[MOD%i] % MOD; FOR(p,0,SZ(val)-1) f[N+1][p] = 1; FOR(i,1,N) f[i][SZ(val)] = 0; RFOR(p,SZ(val)-2,0){ int lp = val[p+1]-val[p]; RFOR(i,N,1){ f[i][p] = 0; if (p < SZ(val)-1) f[i][p] = (f[i][p] + f[i][p+1]) % MOD; if (A[i] <= p && p < B[i]) { int m = 0; int g = lp; FOR(j,i+1,N+1){ f[i][p] = (f[i][p] + (long long) g * f[j][p+1] % MOD) % MOD; if (A[j] <= p && p < B[j]) { ++m; g = (long long) g * (m + lp) % MOD * inv[m+1] % MOD; } } } //TRACE(i _ p _ f[i][p]); } } int ans = 0; FOR(i,1,N) ans = (ans + f[i][0]) % 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...