Submission #41500

#TimeUsernameProblemLanguageResultExecution timeMemory
41500RockyBPalembang Bridges (APIO15_bridge)C++14
63 / 100
2055 ms4048 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=100000, maxx=1000000001; typedef vector<ll> vi; typedef pair<ll,ll> pi; typedef pair<ll,pi> pii; typedef vector<pi> vii; #define fi first #define sc second #define mp make_pair #define pb push_back ll k,n; string buf,bufx; ll x, y; vi dict; ll sum[2*maxn+10]; ll gege; int main(){ ios_base::sync_with_stdio(false); gege=0; cin >> k >> n; if (k==1){ for(int i=0;i<n;i++){ cin >> buf >> x >> bufx >> y; if (buf==bufx) { gege+= labs(x-y); } else { dict.pb(x); dict.pb(y); } } sort(dict.begin(),dict.end()); for(int i=0;i<dict.size();i++){ sum[i]=(i==0?0:sum[i-1])+dict[i]; } ll ans = LONG_LONG_MAX; for(int i=0;i<dict.size();i++){ ans =min(ans,dict[i]*(i+1)-sum[i]+sum[dict.size()-1]-sum[i]-dict[i]*(ll(dict.size())-i-1)); //cout << dict[i] <<" " << dict[i]*(i+1)-sum[i]+sum[dict.size()-1]-sum[i]-dict[i]*(ll(dict.size())-i-1) << "\n"; } if (ans==LONG_LONG_MAX) ans=0; cout << ans+gege+dict.size()/2 << "\n"; return 0; } else{ vii dic; for(int i=0;i<n;i++){ cin >> buf >> x >> bufx >> y; if (buf==bufx){ gege+=labs(x-y); } else{ dic.pb(mp(x,y)); dict.pb(x); dict.pb(y); } } sort(dict.begin(),dict.end()); ll ans = LONG_LONG_MAX, semen; for(int i=0;i<dict.size();i++){ ll l = 0, r = 1000000001; ll mid1,mid2,mid3,semen1,semen2,semen3; while(l<r){ mid1=l+(r-l)/3; mid2=(l+(r-l)*2/3); mid3 = (l+r)/2; semen1=0,semen2=0,semen3=0; for(int k=0;k<dic.size();k++){ semen1+=min(labs(dic[k].fi-dict[i])+labs(dic[k].sc-dict[i]),labs(dic[k].fi-mid1)+labs(dic[k].sc-mid1)); semen2+=min(labs(dic[k].fi-dict[i])+labs(dic[k].sc-dict[i]),labs(dic[k].fi-mid2)+labs(dic[k].sc-mid2)); semen3+=min(labs(dic[k].fi-dict[i])+labs(dic[k].sc-dict[i]),labs(dic[k].fi-mid3)+labs(dic[k].sc-mid3)); } if (semen1>semen3&&semen2>semen3){ l=mid1; r=mid2; } else if (semen1>semen3&&semen2<semen3){ l=mid1; } else{ r=mid2; } ans = min(ans,min(semen1,min(semen3,semen2))); // cout << dict[l] << " " << dict[r]<<"\n"; // cout << l << " dan " << r << " jadinya " << ans << "\n"; } semen = 0; for(int k=0;k<dic.size();k++){ semen+=min(labs(dic[k].fi-dict[i])+labs(dic[k].sc-dict[i]),labs(dic[k].fi-l)+labs(dic[k].sc-l)); } ans=min(semen,ans); } if (ans==LONG_LONG_MAX) ans=0; cout << ans + gege+dict.size()/2 << "\n"; } }

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:39:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<dict.size();i++){
                ^
bridge.cpp:45:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<dict.size();i++){
                ^
bridge.cpp:69:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<dict.size();i++){
                ^
bridge.cpp:76:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int k=0;k<dic.size();k++){
                  ^
bridge.cpp:97:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int k=0;k<dic.size();k++){
                 ^
#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...