답안 #1066893

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1066893 2024-08-20T08:32:06 Z RiverFlow Palembang Bridges (APIO15_bridge) C++14
22 / 100
31 ms 4376 KB
#include <bits/stdc++.h>

#define nl "\n"
#define no "NO"
#define yes "YES"
#define fi first
#define se second
#define vec vector
#define task "main"
#define _mp make_pair
#define ii pair<int, int>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define evoid(val) return void(std::cout << val)
#define FOR(i, a, b) for(int i = (a); i <= (b); ++i)
#define FOD(i, b, a) for(int i = (b); i >= (a); --i)
#define unq(x) sort(all(x)); x.resize(unique(all(x)) - x.begin())

using namespace std;

template<typename U, typename V> bool maxi(U &a, V b) {
    if (a < b) { a = b; return 1; } return 0;
}
template<typename U, typename V> bool mini(U &a, V b) {
    if (a > b) { a = b; return 1; } return 0;
}

const int N = (int)2e5 + 9;
const int mod = (int)1e9 + 7;

void prepare(); void main_code();

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    if (fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
    const bool MULTITEST = 0; prepare();
    int num_test = 1; if (MULTITEST) cin >> num_test;
    while (num_test--) { main_code(); }
}

void prepare() {};

int k, n;

namespace case1 {
    ii b[N];
    void sol() {
        long long ans = (long long)1e17;
        vector<ii> ev;

        int num_greater = 0, sum_gre = 0;
        long long final_sum = 0, tot_sum = 0, sum_greater = 0;

        int cross_road = 0;

        for(int i = 1; i <= n; ++i) {
            char a, b; int x, y;
            cin >> a >> x >> b >> y;
            if (a == b) {
                final_sum += abs(x - y);
                continue ;
            }
            ++cross_road;
            if (x > y) swap(x, y);
            ev.push_back(_mp(x, x));
            ev.push_back(_mp(y, y));
            sum_greater += x + y;
        }
        tot_sum = sum_greater;
        num_greater = sum_gre = 2 * cross_road;

        if (cross_road == 0)
            ans = 0;
        sort(ev.begin(), ev.end());
        for(int i = 0; i < sz(ev); ++i) {
            int j = i;
            while (j + 1 < sz(ev) and ev[j + 1].fi == ev[i].fi) ++j;
            for(int k = i; k <= j; ++k) {
                --num_greater;
                sum_greater -= ev[k].se;
            }
            int x = ev[i].fi;
            ans = min(ans,
                    sum_greater - 1LL * num_greater * x +
                    1LL * (sum_gre - num_greater) * x - (tot_sum - sum_greater) + sum_gre/2);
            i = j;
        }
        cout << ans + final_sum;
    }
};

void main_code() {
    cin >> k >> n;
    if (k == 1) {
        case1::sol();
        return ;
    }

}


/*     Let the river flows naturally     */

Compilation message

bridge.cpp: In function 'int main()':
bridge.cpp:36:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:37:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 344 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 17 ms 3288 KB Output is correct
13 Correct 31 ms 4312 KB Output is correct
14 Correct 24 ms 3800 KB Output is correct
15 Correct 19 ms 2776 KB Output is correct
16 Correct 18 ms 3800 KB Output is correct
17 Correct 21 ms 4308 KB Output is correct
18 Correct 31 ms 3948 KB Output is correct
19 Correct 31 ms 4376 KB Output is correct
20 Correct 25 ms 4056 KB Output is correct
21 Correct 27 ms 4052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -