답안 #778996

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
778996 2023-07-11T06:21:33 Z 이동현(#10002) Bodyguards (CEOI10_bodyguards) C++17
0 / 100
1000 ms 40020 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define int long long
using namespace std;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int r, c;
    cin >> r;
    vector<vector<int>> a(r, vector<int>(2));
    for(int i = 0; i < r; ++i){
        cin >> a[i][0] >> a[i][1];
    }
    cin >> c;
    vector<vector<int>> b(c, vector<int>(2));
    for(int i = 0; i < c; ++i){
        cin >> b[i][0] >> b[i][1];
    }

    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
    reverse(b.begin(), b.end());
    vector<vector<int>> vc = {{b[0][0] * b[0][1], b[0][1], b[0][1]}};
    int j = 1;
    auto upd = [&](int minus, int cnt){
        while((int)vc.size() > 1){
            int sz = (int)vc.size();
            int v1 = (vc[sz - 2][0] - minus * vc[sz - 2][1]) / vc[sz - 2][1];
            int v2 = (vc[sz - 1][0] - minus * (cnt - vc[sz - 2][2])) / vc[sz - 1][1];
            if(v1 > v2){
                break;
            }
            vc[sz - 2][0] += vc[sz - 1][0];
            vc[sz - 2][1] += vc[sz - 1][1];
            vc[sz - 2][2] += vc[sz - 1][1];
            vc.pop_back();
        }
    };
    for(int i = 0; i < r; ++i){
        upd(a[i][1], a[i][0]);
        while(j < c){
            if(vc.back()[2] >= a[i][0]){
                break;
            }
            vc.push_back({b[j][0] * b[j][1], b[j][1], vc.back()[2] + b[j][1]});
            ++j;
            upd(a[i][1], a[i][0]);
        }
        if(vc.back()[2] < a[i][0]){
            cout << "0\n";
            return 0;
        }
        while(j < c){
            int sz = (int)vc.size();
            int psz = (sz >= 2 ? vc[sz - 2][2] : 0);
            int v1 = (vc[sz - 1][0] - a[i][1] * (a[i][0] - psz)) / vc[sz - 1][1];
            // cout << "MJ " << j << ' ' << v1 << ' ' << b[j][0] << endl;
            if(v1 > b[j][0]){
                break;
            }
            vc[sz - 1][0] += b[j][0] * b[j][1];
            vc[sz - 1][1] += b[j][1];
            vc[sz - 1][2] += b[j][1];
            ++j;
            upd(a[i][1], a[i][0]);
        }
        for(auto&k:vc){
            cout << k[0] << ' ' << k[1] << ' ' << k[2] << endl;
        }
        cout << endl;

        int sz = (int)vc.size();
        for(int k = 0; k < sz - 1; ++k){
            vc[k][0] -= vc[k][1] * a[i][1];
        }
        int psz = (sz >= 2 ? vc[sz - 2][2] : 0);
        vc[sz - 1][0] -= a[i][1] * (a[i][0] - psz);

        for(auto&k:vc){
            if(k[0] < 0){
                cout << "0\n";
                return 0;
            }
        }
    }

    assert(0);
    cout << "1\n";
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 64 ms 876 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 23 ms 1876 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 167 ms 11368 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1042 ms 32216 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1060 ms 40020 KB Time limit exceeded
2 Halted 0 ms 0 KB -