Submission #111417

#TimeUsernameProblemLanguageResultExecution timeMemory
111417ecasdqinaBoat (APIO16_boat)C++14
31 / 100
1543 ms525312 KiB
#include <bits/stdc++.h> using namespace std::literals::string_literals; using i64 = long long; using std::cout; using std::endl; using std::cin; template<typename T> std::vector<T> make_v(size_t a){return std::vector<T>(a);} template<typename T,typename... Ts> auto make_v(size_t a,Ts... ts){ return std::vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...)); } int main() { int n; scanf("%d", &n); std::vector<int> a(n), b(n); for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]); const int MOD = 1e9 + 7; auto dp = make_v<i64>(n + 1, 0); dp[0].resize(1, 1); auto sub = make_v<i64>(n + 1, 0); sub[0].resize(2, 0); sub[0][1] = 1; for(int i = 0; i < n; i++) { dp[i + 1].resize(b[i] - a[i] + 1, 0); sub[i + 1].resize(b[i] - a[i] + 2, 0); for(int j = 0; j < i + 1; j++) { for(int k = a[i]; k < b[i] + 1; k++) { if(j and k < a[j - 1]) continue; int ind = 0; if(j) ind = std::min((int)dp[j].size(), k - a[j - 1]); else ind = 1; (dp[i + 1][k - a[i]] += sub[j][ind]) %= MOD; } } for(int j = 0; j < dp[i + 1].size(); j++) sub[i + 1][j + 1] = (sub[i + 1][j] + dp[i + 1][j]) % MOD; // for(auto v: dp[i + 1]) cout << v << " "; cout << endl; // for(auto v: sub[i + 1]) cout << v << " "; cout << endl; } i64 ans = 0; for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD; printf("%lld\n", ans); return 0; }

Compilation message (stderr)

boat.cpp: In function 'int main()':
boat.cpp:36:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0; j < dp[i + 1].size(); j++) sub[i + 1][j + 1] = (sub[i + 1][j] + dp[i + 1][j]) % MOD;
                  ~~^~~~~~~~~~~~~~~~~~
boat.cpp:43:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD;
                 ~~^~~~~~~~~~~
boat.cpp:43:54: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD;
                                                    ~~^~~~~~~~~~~~~~
boat.cpp:17:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  int n; scanf("%d", &n); std::vector<int> a(n), b(n);
         ~~~~~^~~~~~~~~~
boat.cpp:18:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[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...