Submission #1366159

#TimeUsernameProblemLanguageResultExecution timeMemory
1366159swstudy000Palembang Bridges (APIO15_bridge)C++20
22 / 100
48 ms10332 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){
        if(vec.empty()){
            cout<<ans;
            return 0;
        }
        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});
            if(a!=0) operate.push_back({a-1,-1});
            operate.push_back({a,0});
            if(b!=1000000000) 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;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...