제출 #1366156

#제출 시각아이디문제언어결과실행 시간메모리
1366156swstudy000Palembang Bridges (APIO15_bridge)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<array<int,2>> vec;
signed main(){
    cin.tie(0)->ios::sync_with_stdio(0);
    int k,n;
    cin>>k>>n;
    int ans=0;
    for(int i=1;i<=n;i++){
        string p,q;
        int a,b;
        cin>>p>>a>>q>>b;
        if(p==q){
            ans+=abs(a-b);
        }
        else{
            ans+=abs(a-b)+1;
            vec.push_back({min(a,b),max(a,b)});
        }
    }
    sort(vec.begin(),vec.end());
    if(k==1){
        int back=0,front=0,bn=0,fn=0;
        int ans2=LLONG_MAX;
        for(auto[a,b]:vec) front+=a,fn++;
        vector<array<int,2>> operate;
        for(auto[a,b]:vec){
            operate.push_back({b,-1});
            operate.push_back({a-1,-1});
            operate.push_back({a,0});
            operate.push_back({b+1,1});
        }
        sort(operate.begin(),operate.end());
        for(int i=0,j=0;i<operate.size();i=j){
            int pos=operate[i][0],t=operate[i][1];
            while(j<operate.size()&&operate[i][0]==operate[j][0]){
                int pos2=operate[j][0],t2=operate[j][1];
                if(t2==0){
                    fn--;
                    front-=pos2;
                }
                if(t2==1){
                    bn++;
                    back+=pos2-1;
                }
                j++;
            }
            // cout<<pos<<' '<<front<<' '<<back<<"\n";
            ans2=min(ans2,front-fn*pos+bn*pos-back);
            // cout<<front-fn*pos+bn*pos-back<<"\n";
        }
        cout<<ans+ans2*2;
        return 0;
    }
    cout<<-1;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…