# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
43431 | duiceman | Palembang Bridges (APIO15_bridge) | C++14 | 5 ms | 3680 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define umap unordered_map
#define pqueue priority_queue
#define mset multiset
#define mp make_pair
#define mt make_tuple
#define all(x) x.begin(),x.end()
#define long long long
#define MOD 1000000007
#define MAX (long)(1e16+5)
#define MIN (long)(-1e16-5)
#define FILEIN_ freopen("__in.txt","r",stdin)
#define FILEOUT_ freopen("__out.txt","w",stdout)
#define FILEIO_ freopen("__in.txt","r",stdin),freopen("__out.txt","w",stdout)
#define FILEIN(text) freopen(text,"r",stdin)
#define FILEOUT(text) freopen(text,"w",stdout)
#define FILEIO(text) freopen(text".in","r",stdin),freopen(text".out","w",stdout)
char c1[5],c2[5];
umap<long,long> in,out;
pair<long,long> a[100005];
main(){
long t,i,j,k,n,m,x,y,res=0,l=0,r=0,mn=MAX,m1,m2,r1,r2;
set<long> pos;
in.reserve(200005);
out.reserve(200005);
double med;
scanf("%lld %lld",&m,&n);
if(m != 1) return 136;
for(i = 1; i <= n; i++){
scanf("%s %lld %s %lld",c1,&x,c2,&y);
x++;
y++;
if(x > y) swap(x,y);
res += y-x;
if(c1[0] == c2[0]){
n--;
i--;
continue;
}
a[i] = {x,y};
med += (double)(x+y)/2.0;
res++;
in[x]++;
out[y]++;
pos.emplace(x);
pos.emplace(y);
}
med /= (double)n;
// printf("%.2lf\n",med);
m1 = (long)med;
r1 = res;
for(i = 1; i <= n; i++){
if(m1 >= a[i].x && m1 <= a[i].y) continue;
r1 += min(abs(a[i].x-m1),abs(a[i].y-m1))*2;
}
m2 = (long)ceil(med);
r2 = res;
for(i = 1; i <= n; i++){
if(m2 >= a[i].x && m2 <= a[i].y) continue;
r2 += min(abs(a[i].x-m2),abs(a[i].y-m2))*2;
}
if(r1 < r2){
if(in[m1] + out[m1] == 0){
return 136;
}
}
else if(r1 > r2){
if(in[m2] + out[m2] == 0){
return 136;
}
}
else{
if(in[m1] + out[m1] == 0 && in[m2] + out[m2] == 0){
return 136;
}
}
printf("%lld\n",min(r1,r2));
/*l = r = 0;
for(long x : pos){
res += x*2*in[x];
r += in[x];
}
y = 0;
for(long x : pos){
res -= (x-y)*r*2;
res += (x-y)*l*2;
r -= in[x];
l += out[x];
mn = min(mn,res);
y = x;
}
printf("%lld\n",mn);*/
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |