Submission #378780

#TimeUsernameProblemLanguageResultExecution timeMemory
378780daniel920712Gift (IZhO18_nicegift)C++14
49 / 100
408 ms23168 KiB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stack>
#include <map>
#include <vector>

using namespace std;
map < long long , stack < long long > > all;
vector < vector < long long > > que;
vector < long long > ttt;
vector < pair < long long , long long > > tt2;
long long F(long long a,long long b)
{
    if(b==0) return a;
    return F(b,a%b);
}
int main()
{
    //freopen("aa.txt","w+t",stdout);
    long long N,K,i,j,ans=0,x,y,a,b,t,xx,tt,now,con;
    scanf("%lld %lld",&N,&K);
    for(i=1;i<=N;i++)
    {
        scanf("%lld",&t);
        all[t].push(i);
        ans+=t;
        xx=t;
    }
    if(ans%K) printf("-1\n");
    else if(ans<=100000)
    {

        while(!all.empty())
        {
            ttt.clear();
            tt2.clear();
            for(i=0;i<K;i++)
            {
                if(all.empty())
                {
                    printf("-1\n");
                    return 0;
                }
                if(i==0)
                {
                    a=all.begin()->first;
                    b=all[a].top();
                    all[a].pop();
                    if(all[a].empty()) all.erase(a);
                }
                else
                {
                    a=prev(all.end())->first;
                    b=all[a].top();
                    all[a].pop();
                    if(all[a].empty()) all.erase(a);
                }
                ttt.push_back(b);
                tt2.push_back(make_pair(a,b));
            }
            que.push_back(ttt);
            for(auto i:tt2) if(i.first!=1) all[i.first-1].push(i.second);

        }
        printf("%lld\n",ans/K);
        for(auto i:que)
        {
            printf("1 ");
            for(auto j:i) printf("%lld ",j);
            printf("\n");
        }

    }
    else
    {

        tt=K*N/F(K,N);
        //printf("%lld\n",tt);
        ans=(xx*N)/(tt);
        //printf("%lld\n",ans);
        con=xx*N/(ans*K);
        if(con*K>3000000) printf("-1\n");
        else
        {
            printf("%lld\n",con);
            now=0;
            for(i=0;i<con;i++)
            {
                printf("%lld ",ans);
                for(j=0;j<K;j++)
                {
                    printf("%lld ",now+1);
                    now=(now+1)%N;
                }
                printf("\n");
            }
        }

    }
    return 0;
}

Compilation message (stderr)

nicegift.cpp: In function 'int main()':
nicegift.cpp:21:29: warning: unused variable 'x' [-Wunused-variable]
   21 |     long long N,K,i,j,ans=0,x,y,a,b,t,xx,tt,now,con;
      |                             ^
nicegift.cpp:21:31: warning: unused variable 'y' [-Wunused-variable]
   21 |     long long N,K,i,j,ans=0,x,y,a,b,t,xx,tt,now,con;
      |                               ^
nicegift.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   22 |     scanf("%lld %lld",&N,&K);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
nicegift.cpp:25:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   25 |         scanf("%lld",&t);
      |         ~~~~~^~~~~~~~~~~
#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...