Submission #42826

#TimeUsernameProblemLanguageResultExecution timeMemory
42826nonocutWiring (IOI17_wiring)C++14
0 / 100
1063 ms6168 KiB
//S4 #include "wiring.h" #include<bits/stdc++.h> using namespace std; #define vi vector<int> #define ll long long const int maxn = 2e5 + 5; const ll inf = 1e16; int n,m; int pos[maxn]; ll sum[maxn]; ll dp[maxn]; ll get(int l1, int r1, int l2, int r2) { ll res = (sum[r2]-sum[l2-1]) - (sum[r1]-sum[l1-1]); res += (ll)max(0,(r2-l2+1)-(r1-l1+1))*(-(sum[r1]-sum[r1-1])); res += (ll)max(0,(r1-l1+1)-(r2-l2+1))*(sum[l2]-sum[l2-1]); // printf("----- get (%d, %d) (%d, %d) = %lld\n",l1,r1,l2,r2,res); return res; } ll min_total_length(vi a, vi b) { n = a.size(); m = b.size(); for(auto x : a) pos[x] = 0; for(auto x : b) pos[x] = 1; for(int i=1;i<=n+m;i++) sum[i] = sum[i-1] + i; for(int x=n+m;x>=1;x--) { dp[x] = inf; int cnt = 0, i = -1; for(int y=x+1;y<=n+m;y++) { // printf("\tx = %d y = %d\n",x,y); if(pos[y]!=pos[y-1]) { if(i==-1) i = y; else break; } if(i!=-1) dp[x] = min(dp[x], get(x,i-1,i,y) + dp[y+1]); } // printf("dp %d = %lld\n",x,dp[x]); } return dp[1]; }

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:27:13: warning: unused variable 'cnt' [-Wunused-variable]
         int cnt = 0, i = -1;
             ^
#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...