Submission #1079419

#TimeUsernameProblemLanguageResultExecution timeMemory
1079419JooDdaeCoin Collecting (JOI19_ho_t4)C++17
37 / 100
154 ms274432 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 1e18; int n, x[200200], y[200200]; int main() { cin.tie(0)->sync_with_stdio(0); cin >> n; for(int i=1;i<=n+n;i++) cin >> x[i] >> y[i]; vector<int> A, B; ll ans = 0; for(int i=1;i<=n+n;i++) { int D = min(max(x[i], 1), n); ans += abs(D-x[i]); if(y[i] >= 2) { A.push_back(D); ans += y[i]-2; } else { B.push_back(D); ans += 1-y[i]; } } if(A.size() > B.size()) swap(A, B); sort(A.begin(), A.end()), sort(B.begin(), B.end()); vector<vector<ll>> dp(n+1, vector<ll>(A.size()+1, INF)); dp[0][0] = 0; for(int i=1;i<=n;i++) { for(int a=0;a<=A.size();a++) { int b = i+i-a; if(b < 0 || b > B.size()) continue; if(a >= 2) dp[i][a] = min(dp[i][a], dp[i-1][a-2] + 1 + abs(A[a-2]-i) + abs(A[a-1]-i)); if(b >= 2) dp[i][a] = min(dp[i][a], dp[i-1][a] + 1 + abs(B[b-2]-i) + abs(B[b-1]-i)); if(a >= 1 && b >= 1) dp[i][a] = min(dp[i][a], dp[i-1][a-1] + abs(B[b-1]-i) + abs(A[a-1]-i)); } } cout << ans + dp[n][A.size()]; }

Compilation message (stderr)

joi2019_ho_t4.cpp: In function 'int main()':
joi2019_ho_t4.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         for(int a=0;a<=A.size();a++) {
      |                     ~^~~~~~~~~~
joi2019_ho_t4.cpp:37:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |             if(b < 0 || b > B.size()) continue;
      |                         ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...