제출 #751690

#제출 시각아이디문제언어결과실행 시간메모리
751690sofija6Xylophone (JOI18_xylophone)C++14
100 / 100
410 ms712 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;
static int A[5000];

void solve(int N) {
    int diff2[N+2],diff3[N+2],cnt[N+2];
    for (int i=1;i<N;i++)
    {
        if (i<N-1)
            diff3[i]=query(i,i+2);
        diff2[i]=query(i,i+1);
    }
    for (int i=1;i<=N;i++)
    {
        int cur=1;
        A[1]=i;
        for (int j=2;j<=N;j++)
        {
            if (j>2 && N>2 && diff3[j-2]!=diff2[j-2]+diff2[j-1])
                cur*=(-1);
            A[j]=A[j-1]+diff2[j-1]*cur;
        }
        bool yes=true;
        for (int j=1;j<=N;j++)
            cnt[j]=0;
        for (int j=1;j<=N;j++)
        {
            if (A[j]<=N && A[j]>=1)
            {
                if ((A[j]==N && !cnt[1]) || cnt[A[j]])
                    yes=false;
                cnt[A[j]]++;
            }
        }
        for (int j=1;j<=N;j++)
        {
            if (!cnt[j])
                yes=false;
        }
        if (yes)
        {
            for (int j=1;j<=N;j++)
                answer(j,A[j]);
            return;
        }
        yes=true;
        cur=-1;
        for (int j=2;j<=N;j++)
        {
            if (j>2 && N>2 && diff3[j-2]!=diff2[j-2]+diff2[j-1])
                cur*=(-1);
            A[j]=A[j-1]+diff2[j-1]*cur;
        }
        for (int j=1;j<=N;j++)
            cnt[j]=0;
        for (int j=1;j<=N;j++)
        {
            if (A[j]<=N && A[j]>=1)
            {
                if ((A[j]==N && !cnt[1]) || cnt[A[j]])
                    yes=false;
                cnt[A[j]]++;
            }
        }
        for (int j=1;j<=N;j++)
        {
            if (!cnt[j])
                yes=false;
        }
        if (yes)
        {
            for (int j=1;j<=N;j++)
                answer(j,A[j]);
            return;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...