답안 #660918

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660918 2022-11-23T14:26:37 Z danikoynov Palembang Bridges (APIO15_bridge) C++14
22 / 100
104 ms 6008 KB
#include <bits/stdc++.h>
#define endl '\n'

using namespace std;
typedef long long ll;

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

const int maxn = 1e5 + 10, smalln = 2010;

struct work
{
    ll x, y;
} w[maxn];

int k, n;
ll pref[smalln][2];

bool cmp(work w1, work w2)
{
    return w1.x + w1.y < w2.x + w2.y;
}

struct median
{
    priority_queue < int > lf, rf;
    ll lf_sum, rf_sum;

    median()
    {
        lf_sum = 0;
        rf_sum = 0;
    }

    void add(int x)
    {
        lf.push(x);
        lf_sum += x;
        if (lf.size() - 1 > rf.size())
        {
            lf_sum -= lf.top();
            rf_sum += lf.top();
            rf.push(lf.top());
            lf.pop();
        }
    }

    ll calc()
    {
        return rf_sum - lf_sum;
    }
};

void solve()
{
    cin >> k >> n;
    ll ans = 0;
    vector < ll > v, sx;
    for (int i = 1; i <= n; i ++)
    {
        char c1, c2;
        cin >> c1 >> w[i].x >> c2 >> w[i].y;
        if (w[i].x > w[i].y)
            swap(w[i].x, w[i].y);
        if (c1 == c2)
        {
            ans = ans + w[i].y - w[i].x;
            i --;
            n --;
        }
        else
        {
            v.push_back(w[i].y);
            v.push_back(w[i].x);
            sx.push_back(w[i].x + w[i].y);
            ans ++;
        }
    }

    //for (int i = 1; i <= n; i ++)
      //  cout << w[i].x << " - " << w[i].y << endl;
    if (k == 1)
    {

        sort(v.begin(), v.end());
        for (int i = 0; i < v.size() / 2; i ++)
            ans = ans - (v[i]);
        for (int i = v.size() / 2; i < v.size(); i ++)
            ans = ans + v[i];

        cout << ans << endl;

    }
    else
    {
        ll best = 1e18;
        if (v.empty())
            best = 0;
        sort(w + 1, w + n + 1, cmp);
        sort(v.begin(), v.end());

        median go_right, go_left;

        for (int i = 1; i <= n; i ++)
        {
            go_right.add(w[i].x);
            go_right.add(w[i].y);
            pref[i][0] = go_right.calc();
        }

        for (int i = n; i > 0; i --)
        {
            go_left.add(w[i].x);
            go_left.add(w[i].y);
            pref[i][1] = go_left.calc();
        }

        for (int i = 1; i <= n; i ++)
        {
            best = min(best, pref[i][0] + pref[i + 1][1]);
        }

        cout << ans + best << endl;

    }


}

int main()
{
    solve();
    return 0;
}
/**
2 5
B 0 A 4
B 1 B 3
A 5 B 7
B 2 A 6
B 1 A 7
*/

Compilation message

bridge.cpp: In function 'void solve()':
bridge.cpp:91:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |         for (int i = 0; i < v.size() / 2; i ++)
      |                         ~~^~~~~~~~~~~~~~
bridge.cpp:93:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |         for (int i = v.size() / 2; i < v.size(); i ++)
      |                                    ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 2 ms 368 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 320 KB Output is correct
7 Correct 2 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 304 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 2 ms 368 KB Output is correct
5 Correct 2 ms 340 KB Output is correct
6 Correct 1 ms 316 KB Output is correct
7 Correct 1 ms 320 KB Output is correct
8 Correct 1 ms 316 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 49 ms 5592 KB Output is correct
13 Correct 104 ms 6008 KB Output is correct
14 Correct 66 ms 5136 KB Output is correct
15 Correct 65 ms 3592 KB Output is correct
16 Correct 77 ms 5896 KB Output is correct
17 Correct 95 ms 5916 KB Output is correct
18 Correct 87 ms 5912 KB Output is correct
19 Correct 103 ms 5944 KB Output is correct
20 Correct 77 ms 5996 KB Output is correct
21 Correct 96 ms 5996 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Incorrect 1 ms 308 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Incorrect 1 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 304 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Incorrect 1 ms 312 KB Output isn't correct
5 Halted 0 ms 0 KB -