Submission #1154108

#TimeUsernameProblemLanguageResultExecution timeMemory
1154108arkanefuryGift (IZhO18_nicegift)C++20
0 / 100
207 ms163568 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define in insert
#define lb lower_bound
#define F first
#define S second
#define sz size()
#define int long long
#define all(v) v.begin(),v.end()
#define FOR1(x, n) for(int j = x; j <= n; j ++)
#define FOR(x, n, m, d) for(int x = n; x <= m; x += d)
#define FORR(x, n, m, d) for(int x = n; x >= m; x -= d)
#define nikita ios_base::sync_with_stdio(0), cin.tie(0);
const int N =  3e6+5;
int a[N], b[N];
int n,m,k,sum=0,x,y, ans, r,pref[N], cnt, l, mod = 1e9+7, cal,lp = 1;
bool used[N];
vector<int>g[N], otvet[N], vec;
string s, str;
long long combination(int n, int k) {
    if (k > n) return 0;
    if (k == 0 || k == n) return 1;
    if (k > n - k) k = n - k;

    long long result = 1;
    for (int i = 1; i <= k; ++i) {
        result *= (n - (k - i));
        result /= i;
        if(result > 1e15)return -1;
    }
    if (result > 3e6) return -1;
    return result;
}
void rec(int k, int pos, int ema = 0){
    if(lp>3e6)return;
    if(ema == k){
        for(auto i : vec)otvet[lp].pb(i);
        lp ++;
        return;
    }
    FOR(i, pos+1, n, 1){
        vec.pb(i);
        rec(k, i, ema+1);
        vec.pop_back();
        if(lp>3e6)return;
    }
}
void solve(){
    cin >> n >> m;
    sum = 0;
    FOR(i, 1, n, 1)cin >> a[i], sum += a[i];
    if(sum%m){
        cout<<-1;
        return;
    }
    if(n%m==0){
        x = 1;
        cout << n/m << '\n';
        FOR(i, 1, n/m, 1){
            cout << a[1] << ' ';
            FOR(j, x, x+m-1, 1)cout<<j<<' ';
            cout<<'\n';
            x += m;
        }
            return;
    }
    k = n % m;
    k = m - k;
    x = a[1];
    int cnk = combination(n-(m-k), k);
    if(cnk==-1){
        cout << cnk;
        return;
    }
    if(x%cnk){
        cout << -1;
        return;
    }
    rec(k, m-k);
    if(lp-1+m/2 > 3e6){
        cout << -1;
        return;
    }
    cout << lp-1+n/m << '\n';
    FOR(i, 1, lp-1, 1){
        cout << x / cnk << ' ';
        FOR(j, 1, m-k, 1)cout << j << ' ';
        for(auto j : otvet[i]){
            cout << j << ' ';
            a[j] -= x/cnk;
        }
        cout << '\n';
    }
    x = m-k+1;
    FOR(i, 1, n/m, 1){
        cout << a[n] << ' ';
        FOR(j, x, x+m-1, 1)cout << j << ' ';
        cout<<'\n';
        x += m;
    }
    
}
signed main(){
    nikita
    int tt = 1;
    if(!tt)cin >> tt;
    FOR(i, 1, tt, 1)solve();
}
#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...