제출 #1130693

#제출 시각아이디문제언어결과실행 시간메모리
1130693GrayGift (IZhO18_nicegift)C++20
100 / 100
591 ms106008 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define ld long double
#define ff first
#define ss second
#define ln "\n"
#define mp make_pair

const ll INF = 2e18;
const ll MOD = 1e9+7;

void solve(){
    ll n, k; cin >> n >> k;
    vector<pair<ll, ll>> a(n);
    ll sum=0;
    for (ll i=0; i<n; i++){
        cin >> a[i].ff; a[i].ss=i;
        sum+=a[i].ff;
    }
    sort(a.begin(), a.end());
    if (a.back().ff>sum-a.back().ff or sum%k){
        cout << -1 << ln; return;
    }
    vector<ll> divider;
    ll op_cnt = sum/k, cur=0;
    for (ll i=0; i<n; i++){
        cur+=a[i].ff;
        cur%=op_cnt;
        if (cur) divider.push_back(cur);
    }
    sort(divider.begin(), divider.end());
    divider.erase(unique(divider.begin(), divider.end()), divider.end());
    divider.push_back(op_cnt);
    vector<vector<ll>> opera(divider.size());
    cur=0; ll opi=0;
    for (ll i=0; i<n; i++){
        while (opi<(ll)divider.size() and divider[opi]<=min(op_cnt, cur+a[i].ff)){
            opera[opi].push_back(a[i].ss);
            opi++;
        }
        if (cur+a[i].ff<op_cnt){
            cur+=a[i].ff; continue;
        }else{
            a[i].ff=cur+a[i].ff-op_cnt;
            i--;
            cur=0; opi=0;
        }
    }
    cout << opera.size() << ln;
    for (ll i=0; i<(ll)opera.size(); i++){
        cout << divider[i]-(i?divider[i-1]:0) << " ";
        for (ll j=0; j<k; j++) cout << opera[i][j]+1 << " ";
        cout << ln;
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    auto start = chrono::high_resolution_clock::now();
    ll t=1;
    // cin >> t;
    while (t--) solve();
    #ifdef LOCAL
    auto duration = chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now() - start);
    cout << setprecision(0) << fixed << "time: " << (double)duration.count()/1000.0 << " milliseconds" << endl;
    #endif
}
#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...