Submission #1016929

# Submission time Handle Problem Language Result Execution time Memory
1016929 2024-07-08T15:41:50 Z TroySer Palembang Bridges (APIO15_bridge) C++17
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>

using namespace std;

const long long int INF = 1e18;

long long int K, N;
long long int build1, build2;
char zone1, zone2;

long long int Dmin = 0;

struct Place {
    char zone;
    long long int building;
};

vector<pair<Place, Place> > people;

int M;

bool cmp(const pair<Place, Place> &a, const pair<Place, Place> &b) {
    return a.first.building < b.first.building;
}

bool cmp2(const pair<Place, Place> &a, const pair<Place, Place> &b) {
    return a.second.building < b.second.building;
}

int main() {
    cin >> K >> N;
    for (int i = 0; i < N; i++) {
        cin >> zone1 >> build1 >> zone2 >> build2;
        if (zone1 == zone2) {
            Dmin += abs(build2 - build1);
        } else {
            people.push_back(make_pair(
                (Place){zone1, build1}, 
                (Place){zone2, build2}
            ));
        }
    }

    M = people.size();
    long long int possibleMin = INF;
    if (M == 0) {
        possibleMin = 0;
    } else {
        sort(people.begin(), people.end(), cmp);
        for (int i = M/2; i <= M/2 + 1; i++) {
            long long int currK = people[i].first.building;
            long long int currMin = 0;
            for (int j = 0; j < M; j++) {
                currMin += abs(people[j].first.building - currK);
                currMin++;
                currMin += abs(people[j].second.building - currK);
            }
            possibleMin = min(currMin, possibleMin);

            currK = people[i].second.building;
            currMin = 0;
            for (int j = 0; j < M; j++) {
                currMin += abs(people[j].first.building - currK);
                currMin++;
                currMin += abs(people[j].second.building - currK);
            }
            possibleMin = min(currMin, possibleMin);
        }
        sort(people.begin(), people.end(), cmp2);
        for (int i = M/2; i <= M/2 + 1; i++) {
            long long int currK = people[i].first.building;
            long long int currMin = 0;
            for (int j = 0; j < M; j++) {
                currMin += abs(people[j].first.building - currK);
                currMin++;
                currMin += abs(people[j].second.building - currK);
            }
            possibleMin = min(currMin, possibleMin);

            currK = people[i].second.building;
            currMin = 0;
            for (int j = 0; j < M; j++) {
                currMin += abs(people[j].first.building - currK);
                currMin++;
                currMin += abs(people[j].second.building - currK);
            }
            possibleMin = min(currMin, possibleMin);
        }
    }

    cout << possibleMin + Dmin << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Incorrect 1 ms 348 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Incorrect 1 ms 348 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -