Submission #476206

#TimeUsernameProblemLanguageResultExecution timeMemory
476206kakayoshiBuilding Bridges (CEOI17_building)C++14
30 / 100
3059 ms2620 KiB
#include <bits/stdc++.h> using namespace std; #define forw(i,a,b) for(ll i=a;i<=b;i++) #define forb(i,a,b) for(ll i=a;i>=b;i--) typedef long long int ll; ll res,n,h[200005],w[200005],max1[200005],pre,dp[200005]; void sub1() { for (int i=2;i<=n;i++) { max1[i]=1e18; res=0; for (int j=i-1;j>=1;j--) { ll p=(h[i]-h[j])*(h[i]-h[j])+res+max1[j]; if (p<max1[i]) max1[i]=p; res+=w[j]; } } cout<<max1[n]; } ll sqr(ll a) { return a*a; } void sub2() { ll ans=1e18; ans=(h[n]-h[1])*(h[n]-h[1])+pre-w[1]-w[n]; map<int, set<int> > save; forw(i,2,n-1) { forw(j,-20,20) if (save[j].size()) { auto it =lower_bound(save[j].begin(),save[j].end(),(h[i]+h[1])/2); ans=min(ans,sqr(h[1]-h[i])+sqr(h[i]-h[n])+pre-w[1]-w[i]-w[n]); if (it!=save[j].end()) { ans=min(ans,sqr(h[1]-(*it))+sqr((*it)-h[i])+sqr(h[n]-h[i])+pre-w[1]-w[i]-w[n]-j); } if (it!=save[j].begin()) { --it; ans=min(ans,sqr(h[1]-(*it))+sqr((*it)-h[i])+sqr(h[n]-h[i])+pre-w[1]-w[i]-w[n]-j); } } save[w[i]].insert(h[i]); } cout<<ans<<endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); //freopen("test.INP","r",stdin); // freopen("test.OUT","w",stdout); cin>>n; for (int i=1;i<=n;i++) cin>>h[i]; bool ok=true; for (int i=1;i<=n;i++) { cin>>w[i]; pre+=w[i]; if (abs(w[i])>20) ok=false; } if (!ok)sub1(); else sub2(); //sub2(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...