제출 #887487

#제출 시각아이디문제언어결과실행 시간메모리
887487theghostkingPalembang Bridges (APIO15_bridge)C++17
22 / 100
80 ms4392 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

bool comp(pair<int,int> a, pair<int,int> b){
    return a.first+a.second < b.first+b.second;
}

signed main() {
    int k,n;
    cin >> k >> n;
    if (k == 1){
        int dist = 0;
        vector<int> arr;
        for (int i = 0; i<n; i++){
            char a1,a2;
            int d1,d2;
            cin >> a1 >> d1 >> a2 >> d2;
            if (a1 == a2){
                dist += abs(d1-d2);
            }
            else{
                dist++;
                arr.push_back(d1);
                arr.push_back(d2);
            }
        }
        sort(arr.begin(),arr.end());
        int vv = arr.size()/2;
        int md = arr[vv];
        for (auto u : arr){
            dist += abs(md-u);
        }
        cout << dist << '\n';
    }
    else if (k == 2){
        int dist = 0;
        vector<pair<int,int>> arr;
        for (int i = 0; i<n; i++){
            char a1,a2;
            int d1,d2;
            cin >> a1 >> d1 >> a2 >> d2;
            if (a1 == a2){
                dist += abs(d1-d2);
            }
            else{
                dist++;
                pair<int,int> tp = {d1,d2};
                arr.push_back(tp);
            }
        }
        sort(arr.begin(),arr.end(),comp);
        int fst[arr.size()], scd[arr.size()];
        priority_queue<int> g,s;
        int ls = 0;
        int mr = 0;
        for (int i = 0; i<arr.size(); i++){
            g.push(-arr[i].first);
            g.push(-arr[i].second);
            mr += arr[i].first;
            mr += arr[i].second;
            
            while (g.size() > s.size()){
                int temp = g.top();
                g.pop();
                s.push(-temp);
                ls += abs(temp);
                mr -= abs(temp);
            }
            int mid = s.top();
            int one = (s.size()*mid)-ls;
            int two = mr-(g.size()*mid);
            fst[i] = abs(one)+abs(two);
        }
        while (g.size()) g.pop();
        while (s.size()) s.pop();
        ls = 0;
        mr = 0;
        for (int i = arr.size()-1; i>=0; i--){
            g.push(-arr[i].first);
            g.push(-arr[i].second);
            mr += arr[i].first;
            mr += arr[i].second;
            
            while (g.size() > s.size()){
                int temp = g.top();
                g.pop();
                s.push(-temp);
                ls += abs(temp);
                mr -= abs(temp);
            }
            int mid = s.top();
            int one = (s.size()*mid)-ls;
            int two = mr-(g.size()*mid);
            scd[i] = abs(one)+abs(two);
        }
        int xtra = 1e18;
        for (int i = 0; i<arr.size()-1; i++){
            xtra = min(scd[i+1]+fst[i],xtra);
        }
        cout << dist+xtra << '\n';
    }
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

bridge.cpp: In function 'int main()':
bridge.cpp:58:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |         for (int i = 0; i<arr.size(); i++){
      |                         ~^~~~~~~~~~~
bridge.cpp:99:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   99 |         for (int i = 0; i<arr.size()-1; i++){
      |                         ~^~~~~~~~~~~~~
#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...