제출 #1188844

#제출 시각아이디문제언어결과실행 시간메모리
1188844alexddXylophone (JOI18_xylophone)C++20
100 / 100
26 ms460 KiB
#include "xylophone.h"
#include<bits/stdc++.h>
using namespace std;
static int q2[5005],q3[5005];
static int a[5005];
bool calc(int a2, int N)
{
    a[1] = 0;
    a[2] = a2;
    for(int i=3;i<=N;i++)
    {
        bool isbigger;
        if(a[i-2] > a[i-1])
        {
            if(q3[i] == q2[i] + q2[i-1])//a
                isbigger=0;
            else
                isbigger=1;
        }
        else
        {
            if(q3[i] == q2[i] + q2[i-1])
                isbigger=1;
            else
                isbigger=0;
        }

        if(isbigger)
            a[i] = a[i-1] + q2[i];
        else
            a[i] = a[i-1] - q2[i];
    }
    int mnm = N;
    for(int i=1;i<=N;i++)
        mnm = min(mnm, a[i]);
    for(int i=1;i<=N;i++)
        a[i] += -mnm + 1;

    int poz1=-1,pozN=-1;
    for(int i=1;i<=N;i++)
    {
        if(a[i]==1)
            poz1=i;
        if(a[i]==N)
            pozN=i;
    }
    return poz1 < pozN;
}
void solve(int N)
{
    for(int i=2;i<=N;i++)
        q2[i] = query(i-1,i);
    for(int i=3;i<=N;i++)
        q3[i] = query(i-2,i);

    if(calc(q2[2],N))
    {
        for(int i=1;i<=N;i++)
            answer(i, a[i]);
    }
    else if(calc(-q2[2],N))
    {
        for(int i=1;i<=N;i++)
            answer(i, a[i]);
    }
    else
    {
        assert(0);
    }
}
/*

5
2 1 5 3 4

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...