Submission #763348

# Submission time Handle Problem Language Result Execution time Memory
763348 2023-06-22T08:29:01 Z Polar_Bear_2007 Xylophone (JOI18_xylophone) C++14
0 / 100
1 ms 208 KB
#ifdef MINHDEPTRAI

#include "/Library/Developer/CommandLineTools/usr/include/c++/v1/bits/stdc++.h"  
#include <chrono>
#define __gcd(a, b) gcd(a, b)
using namespace std ::chrono;
#else 
#include <bits/stdc++.h>
#include <xylophone.h>
#endif

using namespace std;
#define foru(i, a, b) for(int i = a; i <= b; ++i)
#define ford(i, a, b) for(int i = a; i >= b; --i)
#define IOS ios_base:: sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define mp(a, b) make_pair(a, b)
#define endl '\n'

const int maxN = 5e3 + 5;
const int mod = 998244353;
const long long inf = 1e17;

vector<int> number, triple;

int dau[maxN], ans[maxN], counting[maxN];

void solve(int N){
    int i = 1, j = 2;
    while(j <= N){
        number.push_back(query(i, j));
        i++;
        j++;
    }
    int k = 3;
    i = 1;
    while(k <= N){
        triple.push_back(query(i, k));
        i++;
        k++;
    }

    dau[0] = 1;
    for(int j = 0; j < (int) triple.size(); j++){
        if(triple[j] == number[j + 1] + number[j]){
            dau[j + 1] = dau[j];
        }
        else{
            dau[j + 1] = -dau[j];   
        }
    }
    bool check = true;
    int cnt = 0;

    while(check){
        ans[0] = ++cnt;
        if(cnt > N) break;
        int pos_one = 0, pos_n = -1;

        if(ans[0] == 1) pos_one = j;
        if(ans[0] == N) pos_n = j;

        for(int j = 1; j <= N - 1; j++){
            ans[j] = ans[j - 1] +  number[j - 1] * (-dau[j - 1]);
            counting[ans[j]]++;

            if(ans[j] == 1) pos_one = j;
            if(ans[j] == N) pos_n = j;
        }

        foru(j, 0, N - 1){
            if(ans[j] < 1 || ans[j] > N || counting[ans[j]] > 2 || pos_one > pos_n){
                break;
            }
            if(j == N - 1) check = false;
        }        

    }
    
    cnt = 0;
     while(check){
        ans[0] = ++cnt;
        
        if(cnt > N) break;

        int pos_one = 0, pos_n = -1;
          
        if(ans[0] == 1) pos_one = j;
        if(ans[0] == N) pos_n = j;

        for(int j = 1; j <= N - 1; j++){
            ans[j] = ans[j - 1] +  number[j - 1] * dau[j - 1];
            counting[ans[j]]++;

            if(ans[j] == 1) pos_one = j;
            if(ans[j] == N) pos_n = j;
        }

        foru(j, 0, N - 1){
            if(ans[j] < 1 || ans[j] > N || counting[ans[j]] > 2 || pos_one > pos_n){
                break;
            }
            if(j == N - 1) check = false;
        }        
    }

    foru(j, 0, N - 1) answer(j + 1, ans[j]);
  
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -