Submission #388962

#TimeUsernameProblemLanguageResultExecution timeMemory
388962prvocisloBoat (APIO16_boat)C++17
100 / 100
1050 ms8388 KiB
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <queue> #include <map> #include <set> #include <iomanip> typedef long long ll; using namespace std; const ll mod = 1e9 + 7; void upd(ll& a, const ll& b) { a = (a + b) % mod; } ll mul(const ll& a, const ll& b) { return (a * b) % mod; } ll pwr(const ll& a, const ll& b) { if (!b) return 1; ll h = pwr(a, b >> 1); h = mul(h, h); if (b & 1) h = mul(h, a); return h; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n + 1), b(n + 1); for (int i = 1; i <= n; i++) cin >> a[i] >> b[i]; set<int>s(a.begin(), a.end()); for (int i = 0; i <= n; i++) s.insert(b[i] + 1); vector<int> v(s.begin(), s.end()); vector<vector<ll>> c(v.size(), vector<ll>(n + 1, 0)); for (int i = 0; i < v.size() - 1; i++) { int len = v[i + 1] - v[i]; c[i][0] = 1; for (int j = 1; j <= min(n, len); j++) c[i][j] = mul(c[i][j - 1], mul(len - j + 1, pwr(j, mod - 2))); } vector<vector<ll> > dp(v.size(), vector<ll>(n + 1, 0)); dp[0][0] = 1; for (int i = 1; i <= n; i++) { ll sum = 0; for (int s = 0; s < v.size() - 1; s++) { ll sum2 = 0; // ukoncime tuto uroven for (int pick = 0; pick < i; pick++) upd(sum2, mul(dp[s][pick], c[s][pick])); if (a[i] <= v[s] && v[s] <= b[i]) { for (int pick = i - 1; pick > 0; pick--) upd(dp[s][pick + 1], dp[s][pick]); upd(dp[s][1], sum); } upd(sum, sum2); } /*for (int s = 0; s < v.size() - 1; s++) { cout << v[s] << ": "; for (int p = 0; p <= i; p++) cout << dp[s][p] << " "; cout << "\n"; } cout << "\n";*/ } ll ans = 0; for (int i = 0; i < v.size(); i++) for (int j = 1; j <= n; j++) upd(ans, mul(dp[i][j], c[i][j])); cout << ans << "\n"; return 0; }

Compilation message (stderr)

boat.cpp: In function 'int main()':
boat.cpp:38:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |  for (int i = 0; i < v.size() - 1; i++)
      |                  ~~^~~~~~~~~~~~~~
boat.cpp:50:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int s = 0; s < v.size() - 1; s++)
      |                   ~~^~~~~~~~~~~~~~
boat.cpp:72:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |  for (int i = 0; i < v.size(); i++)
      |                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...