제출 #1159179

#제출 시각아이디문제언어결과실행 시간메모리
1159179AlgorithmWarriorPalembang Bridges (APIO15_bridge)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; long long const INF=1e18; int const MAX=2e5+5; struct location{ int pos; char type; int id; bool operator<(location ot){ return pos<ot.pos; } }loc[MAX]; int k,n; long long s_init; int total_loc; void read(){ cin>>k>>n; int i; for(i=1;i<=n;++i){ char t1,t2; int p1,p2; cin>>t1>>p1>>t2>>p2; s_init+=abs(p2-p1); if(t1!=t2){ loc[++total_loc]={p1,t1,i}; loc[++total_loc]={p2,t2,i}; ++s_init; } } sort(loc+1,loc+total_loc+1); } bool gasit_per[MAX]; void minself(long long&x,long long val){ if(x>val) x=val; } long long spate[MAX],fata[MAX]; void precalc(int inc,int fin,long long v[],int incr){ long long nr=0; int nrper=0; int i; for(i=1;i<=n;++i) gasit_per[i]=0; for(i=inc;i!=fin+incr;i+=incr){ if(i!=inc) nr+=2LL*nrper*abs(loc[i-incr].pos-loc[i].pos); v[i]=nr; if(!gasit_per[loc[i].id]) gasit_per[loc[i].id]=1; else ++nrper; } } long long solve(){ precalc(1,total_loc,spate,1); precalc(total_loc,1,fata,-1); long long rasp=INF; int i; for(i=1;i<=total_loc;++i) minself(rasp,spate[i]+fata[i]); return rasp; } int main() { read(); solve(); cout<<solve()+s_init; 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...