답안 #317671

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
317671 2020-10-30T06:35:17 Z daniel920712 DEL13 (info1cup18_del13) C++14
30 / 100
10 ms 1664 KB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <map>
#include <stack>

using namespace std;
int all[100005];
int Father[1000005];
int Father2[1000005];
bool have[1000005]={0};
bool can[1000005]={0};
bool use[1000005]={0};
vector < int > tt;
vector < int > ttt;
vector < int > ans;
int T,N,M;
stack < int > aaa;

void Find(int here)
{
    int i;
    //printf("%d\n",here);
    if(have[here]) return;
    have[here]=1;
    vector < int > tt;
    for(i=0;i<N;i++)
    {
        if(here&(1<<i)) tt.push_back(i);
    }
    for(i=1;i<tt.size()-1;i++)
    {
        Father[here-(1<<tt[i-1])-(1<<tt[i+1])]=here;
        Father2[here-(1<<tt[i-1])-(1<<tt[i+1])]=tt[i];
        Find(here-(1<<tt[i-1])-(1<<tt[i+1]));
    }
}
void FF(int here)
{
    int i;
    if(here==(1<<N)-1) return;
    FF(Father[here]);
    ans.push_back(Father2[here]);
}
int main()
{
    int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&N,&M);
        //printf("%d %d %d\n",N,ff,ok);
        if((!ok||N==ff)&&N<=18)
        {
            //printf("aa\n");
            if(!ok)
            {
                ff=N;
                Find((1<<N)-1);
                ok=1;
            }

            tt=0;
            for(i=0;i<M;i++)
            {
                scanf("%d",&all[i]);
                all[i]--;
                tt+=(1<<all[i]);
            }
            if(have[tt])
            {
                ans.clear();
                FF(tt);
                printf("%d\n",ans.size());
                for(auto i:ans) printf("%d ",i+1);
                printf("\n");
            }
            else printf("-1\n");
        }
        else
        {
            ok=1;
            all[0]=0;
            for(i=1;i<=M;i++)
            {
                scanf("%d",&all[i]);
            }
            all[M+1]=N+1;
            ttt.clear();
            for(i=0;i<=M;i++) ttt.push_back(all[i+1]-all[i]-1);

            for(i=0;i<=M;i++)
            {
                //printf("%d ",ttt[i]);
                can[i]=0;
                use[i]=0;
                if(ttt[i]>2) can[i]=1;
            }
            //printf("\n");

            for(i=0;i<=M;i++)
            {
                if(ttt[i]%2)
                {
                    if(i!=M&&ttt[i+1]>=1)
                    {
                        use[i]=1;
                        use[i+1]=1;
                        ttt[i]--;
                        ttt[i+1]--;
                    }
                }

            }

            for(i=0;i<=M;i++)
            {
                if(ttt[i]==0) continue;
                if(!can[i])
                {
                    if(i!=M&&ttt[i+1]>=2)
                    {
                        use[i]=1;
                        use[i+1]=1;
                        ttt[i]-=2;
                        ttt[i+1]-=2;
                    }
                    else if(i&&ttt[i-1]>=2)
                    {
                        use[i]=1;
                        use[i-1]=1;
                        ttt[i]-=2;
                        ttt[i-1]-=2;
                    }
                }


            }

            for(i=0;i<=M;i++)
            {
                if(ttt[i]==0) continue;
                if(ttt[i]%2) ok=0;
                if(ttt[i]%2==0&&!use[i]) ok=0;
            }
            printf("%d\n",ok-1);



            ok=1;
        }


    }

    return 0;
}

Compilation message

del13.cpp: In function 'void Find(int)':
del13.cpp:33:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     for(i=1;i<tt.size()-1;i++)
      |             ~^~~~~~~~~~~~
del13.cpp: In function 'void FF(int)':
del13.cpp:42:9: warning: unused variable 'i' [-Wunused-variable]
   42 |     int i;
      |         ^
del13.cpp: In function 'int main()':
del13.cpp:76:26: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wformat=]
   76 |                 printf("%d\n",ans.size());
      |                         ~^    ~~~~~~~~~~
      |                          |            |
      |                          int          std::vector<int>::size_type {aka long unsigned int}
      |                         %ld
del13.cpp:49:11: warning: unused variable 'j' [-Wunused-variable]
   49 |     int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
      |           ^
del13.cpp:49:13: warning: unused variable 'con' [-Wunused-variable]
   49 |     int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
      |             ^~~
del13.cpp:49:17: warning: unused variable 'xx' [-Wunused-variable]
   49 |     int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
      |                 ^~
del13.cpp:49:27: warning: unused variable 'last' [-Wunused-variable]
   49 |     int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
      |                           ^~~~
del13.cpp:49:42: warning: unused variable 'where' [-Wunused-variable]
   49 |     int i,j,con,xx=0,ok=0,last,tt=0,ff=0,where;
      |                                          ^~~~~
del13.cpp:50:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   50 |     scanf("%d",&T);
      |     ~~~~~^~~~~~~~~
del13.cpp:53:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   53 |         scanf("%d %d",&N,&M);
      |         ~~~~~^~~~~~~~~~~~~~~
del13.cpp:68:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   68 |                 scanf("%d",&all[i]);
      |                 ~~~~~^~~~~~~~~~~~~~
del13.cpp:88:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   88 |                 scanf("%d",&all[i]);
      |                 ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 8 ms 1024 KB Output is correct
4 Correct 10 ms 1664 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 384 KB Output isn't correct
2 Incorrect 2 ms 384 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 8 ms 1024 KB Output is correct
4 Correct 10 ms 1664 KB Output is correct
5 Incorrect 1 ms 384 KB Output isn't correct
6 Incorrect 1 ms 384 KB Output isn't correct
7 Incorrect 1 ms 384 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 8 ms 1024 KB Output is correct
4 Correct 10 ms 1664 KB Output is correct
5 Incorrect 1 ms 384 KB Output isn't correct
6 Incorrect 1 ms 384 KB Output isn't correct
7 Incorrect 1 ms 384 KB Output isn't correct
8 Incorrect 8 ms 384 KB Output isn't correct
9 Incorrect 9 ms 640 KB Output isn't correct
10 Incorrect 8 ms 640 KB Output isn't correct
11 Incorrect 8 ms 896 KB Output isn't correct