Submission #249125

#TimeUsernameProblemLanguageResultExecution timeMemory
249125sahil_kBoat (APIO16_boat)C++14
0 / 100
4 ms4224 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define MOD 1000000007 int n; int s_val[510], e_val[510]; vector<int> pts; int s_id[510], e_id[510]; long long dp[510][1010]; // No. of ways to send exactly j boats from i. long long ttl; int main () { cin >> n; for (int i=0; i<n; i++) { cin >> s_val[i] >> e_val[i]; pts.push_back(s_val[i]); pts.push_back(e_val[i]); } pts.push_back(0); sort(pts.begin(), pts.end()); pts.resize(unique(pts.begin(), pts.end())-pts.begin()); for (int i=0; i<n; i++) { s_id[i+1] = lower_bound(pts.begin(), pts.end(), s_val[i])-pts.begin(); e_id[i+1] = lower_bound(pts.begin(), pts.end(), e_val[i])-pts.begin(); } int m = pts.size(); dp[0][0] = 1; for (int i=1; i<=n; i++) { ttl = 0; dp[i][0] = 1; for (int j=1; j<m; j++) { dp[i][j] = dp[i-1][j]; ttl = (ttl+dp[i-1][j-1]*(pts[j]-pts[j-1]))%MOD; if (s_id[i] <= j && j <= e_id[i]) dp[i][j] = (dp[i][j]+ttl)%MOD; } } long long o = 0; for (int j=1; j<m-1; j++) { o = (o+dp[n][j]*(pts[j+1]-pts[j]))%MOD; } o = (o+dp[n][m-1])%MOD; cout << o << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...