Submission #17424101


Source Code Expand

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef vector<int> vec;
int now,n,k,a[105],b[105],c[1005],pos[105];
bool check()
{
    int mx=a[1],mn=a[1];
    for(int i=2;i<=k;i++)mx=max(mx,a[i]),mn=min(mn,a[i]);
    if(mx>=2*mn+1)return 0;
    return 1;
}
vec get(int len)
{
    for(int i=1;i<=k;i++)b[i]=a[i],pos[i]=0;
    for(int i=now-k+len+1;i<=now;i++)pos[c[i]]=i;
    for(int i=1;i<=k;i++)
        if(!pos[i])
        {
            b[i]--;
            if(b[i]<0)return vec(1,k+1);
        }
    int mn=b[1],mx=b[1];
    for(int i=2;i<=k;i++)mn=min(b[i],mn),mx=max(b[i],mx);
    if(mn*2+1<mx)return vec(1,k+1);
    if(mn*2>=mx)
    {
        vec res;
        for(int i=1;i<=k;i++)if(!pos[i])res.pb(i);
        return res;
    }
    else
    {
        vec x(0),y(0),z(0);
        for(int i=1;i<=k;i++)if((!pos[i])&&b[i]==mx)x.pb(i);
        for(int i=1;i<=k;i++)if((!pos[i])&&b[i]==mn)x.pb(i);
        for(int i=1;i<=k;i++)if((!pos[i])&&b[i]!=mx&&b[i]!=mn)y.pb(i);
        int tmp=0;
        for(int i=0;i<x.size();z.pb(x[i]),i++)
            while(tmp<y.size()&&y[tmp]<x[i])z.pb(y[tmp++]);
        while(tmp<y.size())z.pb(y[tmp++]);
        int t1=0,t2=0;
        for(int i=now-k+len+1;i<=now;i++)
        {
            if(b[c[i]]==mx&&(!t1))t1=i;
            if(b[c[i]]==mn)t2=i;
        }
        for(int i=0;i<z.size();i++)
        {
            if(b[z[i]]==mx&&(!t1))t1=i+now+1;
            if(b[z[i]]==mn)t2=i+now+1;
        }
        if(t1<t2)return z;
        return vec(1,k+1);
    }
}
void extend()
{
    vec res(1,k+1);
    for(int i=1;i<=min(n-now,k);i++)if(now-k+i+1>0)res=min(res,get(i));
    for(auto i:res)printf("%d ",i),c[++now]=i,a[i]--;
}
int main()
{
    scanf("%d",&k);
    for(int i=1;i<=k;i++)scanf("%d",&a[i]),n+=a[i];
    if(!check()){puts("-1");return 0;}
    while(now<n)extend();
    return 0;
}

Submission Info

Submission Time
Task E - Permutation Cover
User AzusaCat
Language C++ (GCC 9.2.1)
Score 1500
Code Size 1918 Byte
Status AC
Exec Time 39 ms
Memory 3796 KiB

Compile Error

./Main.cpp: In function ‘vec get(int)’:
./Main.cpp:39:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   39 |         for(int i=0;i<x.size();z.pb(x[i]),i++)
      |                     ~^~~~~~~~~
./Main.cpp:40:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   40 |             while(tmp<y.size()&&y[tmp]<x[i])z.pb(y[tmp++]);
      |                   ~~~^~~~~~~~~
./Main.cpp:41:18: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   41 |         while(tmp<y.size())z.pb(y[tmp++]);
      |               ~~~^~~~~~~~~
./Main.cpp:48:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   48 |         for(int i=0;i<z.size();i++)
      |                     ~^~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:65:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   65 |     scanf("%d",&k);
      |     ~~~~~^~~~~~~~~
./Main.cpp:66:31: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   66 |     for(int i=1;i<=k;i++)scanf("%d",&a[i]),n+=a[i];
      |                          ~~~~~^~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1500 / 1500
Status
AC × 3
AC × 46
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
01.txt AC 11 ms 3620 KiB
02.txt AC 9 ms 3748 KiB
03.txt AC 30 ms 3636 KiB
04.txt AC 34 ms 3796 KiB
05.txt AC 2 ms 3616 KiB
06.txt AC 3 ms 3732 KiB
07.txt AC 8 ms 3636 KiB
08.txt AC 24 ms 3616 KiB
09.txt AC 27 ms 3728 KiB
10.txt AC 2 ms 3688 KiB
11.txt AC 5 ms 3688 KiB
12.txt AC 11 ms 3792 KiB
13.txt AC 33 ms 3760 KiB
14.txt AC 38 ms 3612 KiB
15.txt AC 4 ms 3664 KiB
16.txt AC 5 ms 3696 KiB
17.txt AC 3 ms 3728 KiB
18.txt AC 24 ms 3760 KiB
19.txt AC 39 ms 3692 KiB
20.txt AC 2 ms 3660 KiB
21.txt AC 4 ms 3608 KiB
22.txt AC 4 ms 3708 KiB
23.txt AC 19 ms 3704 KiB
24.txt AC 28 ms 3796 KiB
25.txt AC 2 ms 3704 KiB
26.txt AC 4 ms 3692 KiB
27.txt AC 2 ms 3624 KiB
28.txt AC 3 ms 3484 KiB
29.txt AC 33 ms 3728 KiB
30.txt AC 2 ms 3616 KiB
31.txt AC 7 ms 3652 KiB
32.txt AC 8 ms 3656 KiB
33.txt AC 28 ms 3608 KiB
34.txt AC 2 ms 3632 KiB
35.txt AC 2 ms 3652 KiB
36.txt AC 35 ms 3792 KiB
37.txt AC 25 ms 3704 KiB
38.txt AC 2 ms 3664 KiB
39.txt AC 2 ms 3604 KiB
40.txt AC 2 ms 3488 KiB
41.txt AC 3 ms 3628 KiB
42.txt AC 2 ms 3728 KiB
43.txt AC 1 ms 3688 KiB
s1.txt AC 2 ms 3792 KiB
s2.txt AC 2 ms 3612 KiB
s3.txt AC 2 ms 3568 KiB