Submission #903886

#TimeUsernameProblemLanguageResultExecution timeMemory
903886math_rabbit_1028Wiring (IOI17_wiring)C++14
13 / 100
36 ms8756 KiB
#include <bits/stdc++.h> #include "wiring.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; vector<pii> arr; vector<ll> sum; vector<ll> dp; ll min_total_length(vector<int> R, vector<int> B) { arr.push_back({0, 0}); for (int i = 0; i < R.size(); i++) arr.push_back({R[i], 0}); for (int i = 0; i < B.size(); i++) arr.push_back({B[i], 1}); sort(arr.begin() + 1, arr.end()); dp = vector<ll>(arr.size(), 1e18); sum = vector<ll>(arr.size(), 0); for (int i = 1; i < sum.size(); i++) sum[i] = sum[i - 1] + arr[i].first; dp[0] = 0; int a, b, last, i = 1; while (arr[i].second == arr[i+1].second) i++; b = i; for (int j = 1; j <= i; j++) dp[j] = dp[j-1] + arr[b+1].first - arr[j].first; for (i++; i < arr.size(); i++) { if (arr[i].second != arr[i-1].second) { a = b; b = 0; last = arr[i-1].first; ll val = 0; for (int j = i-1; j >= i-a; j--) { val += arr[i].first - arr[j].first; dp[i] = min(dp[i], dp[j-1] + val); } } b++; if (b <= a) { dp[i] = min(dp[i], dp[i-1] + arr[i].first - last); dp[i] = min(dp[i], dp[i-2*b] + (sum[i] - sum[i-b]) - (sum[i-b] - sum[i-2*b])); } else { dp[i] = min(dp[i], dp[i-1] + arr[i].first - last); } } return dp[arr.size()-1]; }

Compilation message (stderr)

wiring.cpp: In function 'll min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:12:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |  for (int i = 0; i < R.size(); i++) arr.push_back({R[i], 0});
      |                  ~~^~~~~~~~~~
wiring.cpp:13:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |  for (int i = 0; i < B.size(); i++) arr.push_back({B[i], 1});
      |                  ~~^~~~~~~~~~
wiring.cpp:17:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |  for (int i = 1; i < sum.size(); i++) sum[i] = sum[i - 1] + arr[i].first;
      |                  ~~^~~~~~~~~~~~
wiring.cpp:24:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  for (i++; i < arr.size(); i++) {
      |            ~~^~~~~~~~~~~~
wiring.cpp:41:48: warning: 'last' may be used uninitialized in this function [-Wmaybe-uninitialized]
   41 |    dp[i] = min(dp[i], dp[i-1] + arr[i].first - last);
      |                                                ^~~~
wiring.cpp:36:3: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
   36 |   if (b <= a) {
      |   ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...