답안 #99767

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
99767 2019-03-07T01:32:59 Z choikiwon Gift (IZhO18_nicegift) C++17
7 / 100
2000 ms 233784 KB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MN = 1000010;

int N, K;
priority_queue<pair<ll, int> > pq;
vector<vector<int> > S;
vector<ll> X;

int main() {
    std::ios::sync_with_stdio(false);

    cin >> N >> K;

    ll sum = 0;
    for(int i = 0; i < N; i++) {
        ll t; cin >> t;
        pq.push({t, i});
        sum += t;
    }

    if(sum % K) {
        cout << -1;
        return 0;
    }

    while(!pq.empty()) {
        vector<pair<ll, int> > V;
        for(int i = 0; i < K; i++) {
                
            if(pq.empty()) {
                while(1);
            }
            
            V.push_back(pq.top());
            pq.pop();
        }

        /*
        for(int i = 0; i < V.size(); i++) {
            cout << V[i].first << ' ';
        }
        cout << endl;
        //*/
        
        if(pq.empty() || V.back().first < V[0].first - pq.top().first) {
            X.push_back(V.back().first);
            S.push_back(vector<int>());
            for(int i = 0; i < K; i++) {
                S.back().push_back(V[i].second);
                V[i].first -= X.back();
            }
        }
        else {
            ll d = (V.back().first + K - 2) * (K - 1) / K;
            ll t = V[0].first - pq.top().first;

            X.push_back(max(t, V.back().first - d));
            S.push_back(vector<int>());
            for(int i = 0; i < K; i++) {
                S.back().push_back(V[i].second);
                V[i].first -= X.back();
            }
        }

        //cout << X.back() << endl;

        for(int i = 0; i < K; i++) {
            if(V[i].first) {
                pq.push(V[i]);
            }
        }
    }

    cout << X.size() << '\n';
    for(int i = 0; i < X.size(); i++) {
        cout << X[i] << ' ';

        for(int j = 0; j < S[i].size(); j++) {
            cout << S[i][j] + 1 << ' ';
        }
        cout << '\n';
    }
}

Compilation message

nicegift.cpp: In function 'int main()':
nicegift.cpp:79:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < X.size(); i++) {
                    ~~^~~~~~~~~~
nicegift.cpp:82:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0; j < S[i].size(); j++) {
                        ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n=4
2 Correct 2 ms 256 KB n=3
3 Correct 3 ms 356 KB n=3
4 Correct 2 ms 384 KB n=4
5 Correct 2 ms 256 KB n=4
6 Correct 3 ms 384 KB n=2
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n=4
2 Correct 2 ms 256 KB n=3
3 Correct 3 ms 356 KB n=3
4 Correct 2 ms 384 KB n=4
5 Correct 2 ms 256 KB n=4
6 Correct 3 ms 384 KB n=2
7 Correct 2 ms 384 KB n=5
8 Execution timed out 2041 ms 384 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n=4
2 Correct 2 ms 256 KB n=3
3 Correct 3 ms 356 KB n=3
4 Correct 2 ms 384 KB n=4
5 Correct 2 ms 256 KB n=4
6 Correct 3 ms 384 KB n=2
7 Correct 2 ms 384 KB n=5
8 Execution timed out 2041 ms 384 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2075 ms 233784 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n=4
2 Correct 2 ms 256 KB n=3
3 Correct 3 ms 356 KB n=3
4 Correct 2 ms 384 KB n=4
5 Correct 2 ms 256 KB n=4
6 Correct 3 ms 384 KB n=2
7 Correct 2 ms 384 KB n=5
8 Execution timed out 2041 ms 384 KB Time limit exceeded
9 Halted 0 ms 0 KB -