Submission #107145

#TimeUsernameProblemLanguageResultExecution timeMemory
107145oolimryPalembang Bridges (APIO15_bridge)C++14
0 / 100
18 ms512 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<long long, long long> ii;
int main()
{
    //freopen("i.txt","r",stdin);
    int k, n;

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> k >> n;

    vector<ii> points;
    vector<ii> pairs;
    long long forcedDist = 0ll;

    for(int i = 0;i < n;i++){
        char a, c;
        long long b, d;
        cin >> a >> b >> c >> d;

        if(a == c){
            forcedDist += abs(d-b);
        }
        else{
            forcedDist += abs(d-b);
            forcedDist++;
            if(b > d) swap(b,d);
            points.push_back(ii(b,i));
            points.push_back(ii(d,i));
            pairs.push_back(ii(b,d));
        }
    }

    n = points.size();
    sort(points.begin(),points.end());
    for(int i = 0;i < n/2;i++){
        //cout << pairs[i].first << " " << pairs[i].second << "\n";
    }

    long long a = 0;
    long long b = 1;
    long long minVal = 102345678901234567;
    for(b = 1;b < n;b++){
        long long x = points[a].first;
        long long y = points[b].first;
        long long val = 0ll;
        for(int j = 0;j < pairs.size();j++){
            long long p = pairs[j].first;
            long long q = pairs[j].second;
            if((x <= q)&&(p <= x) || (y <= q)&&(p <= y)) continue;
            val += min(min(abs(p-x),abs(p-y)),min(abs(q-x),abs(q-y)));
        }
        minVal = min(minVal,val);
        //cout << x << " " << y << " " << val << "\n";
        while(a < b){
            long long x = points[a].first;
            long long y = points[b].first;
            long long val2 = 0ll;
            for(int j = 0;j < pairs.size();j++){
                long long p = pairs[j].first;
                long long q = pairs[j].second;
                if((x <= q)&&(p <= x) || (y <= q)&&(p <= y)) continue;
                val2 += min(min(abs(p-x),abs(p-y)),min(abs(q-x),abs(q-y)));
            }
            if(val2 <= val){
                val = val2;
                //cout << x << " " << y << " " << val << " f\n";
                minVal = min(minVal,val);
                a++; ///upgrade
            }
            else{
                break;
            }
        }
        a--; ///go back
    }
    if(minVal ==  102345678901234567) minVal = 0;
    cout << 2ll * minVal + forcedDist;





    return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:51:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0;j < pairs.size();j++){
                       ~~^~~~~~~~~~~~~~
bridge.cpp:54:24: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
             if((x <= q)&&(p <= x) || (y <= q)&&(p <= y)) continue;
                ~~~~~~~~^~~~~~~~~~
bridge.cpp:63:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j = 0;j < pairs.size();j++){
                           ~~^~~~~~~~~~~~~~
bridge.cpp:66:28: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
                 if((x <= q)&&(p <= x) || (y <= q)&&(p <= y)) continue;
                    ~~~~~~~~^~~~~~~~~~
#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...