제출 #1179136

#제출 시각아이디문제언어결과실행 시간메모리
1179136alexander707070Palembang Bridges (APIO15_bridge)C++20
63 / 100
2093 ms2264 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; const long long inf=1e17; struct house{ int x,y; }; int n,k,x,y,m,p,q; long long ans,toadd; char s,t; house h[MAXN]; vector<int> vals; void solve_easy(){ if(m==0){ cout<<ans<<"\n"; return; } int pos=vals[m]; for(int i=1;i<=m;i++){ ans+=abs(pos-h[i].x); ans+=abs(pos-h[i].y); ans++; } cout<<ans<<"\n"; } long long calc(){ long long sum=0; for(int i=1;i<=m;i++){ sum+=min( abs(h[i].x-p)+abs(h[i].y-p) , abs(h[i].x-q)+abs(h[i].y-q) )+1; } return sum; } void solve(int l,int r,int optl,int optr){ if(l>r)return; int mid=(l+r)/2,opt; p=vals[mid]; long long best=inf; for(int i=optl;i<=optr;i++){ q=vals[i]; long long curr=calc(); if(curr<best){ best=curr; opt=i; } } toadd=min(toadd,best); solve(l,mid-1,optl,opt); solve(mid+1,r,opt,optr); } void solve_hard(){ if(m==0){ cout<<ans<<"\n"; return; } vals.erase( unique( vals.begin(), vals.end() ), vals.end() ); sort(vals.begin(),vals.end()); toadd=inf; solve(0,int(vals.size())-1,0,int(vals.size())-1); ans+=toadd; cout<<ans<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>k>>n; for(int i=1;i<=n;i++){ cin>>s>>x>>t>>y; if(s==t){ ans+=abs(x-y); continue; } m++; h[m]={x,y}; } for(int i=1;i<=m;i++){ vals.push_back(h[i].x); vals.push_back(h[i].y); } sort(vals.begin(),vals.end()); if(k==1){ solve_easy(); }else{ solve_hard(); } return 0; }
#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...