제출 #1210189

#제출 시각아이디문제언어결과실행 시간메모리
1210189BoomydayXylophone (JOI18_xylophone)C++20
100 / 100
26 ms528 KiB
#include "xylophone.h"

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

void solve(int N) {

	vector<int> twovals(N-1), threevals(N-2);

    for(int i=0;i<N-1;++i){
        twovals[i] = query(i+1, i+2);
    }
    for(int i=0;i<N-2;++i){
        threevals[i] = query(i+1, i+3);
    }
    vector<int> sign = {1}; // 1 = +, -1 = -
    for(int i=0;i<N-2;++i){
        if (twovals[i]+twovals[i+1]==threevals[i]) {
            sign.push_back(sign.back());
        } else {
            sign.push_back(-sign.back());
        }
    }
    vector<int> nums= {0};
    for(int i=0;i<N-1;++i){
        nums.push_back(nums.back() + sign[i] * twovals[i]);
    }

    int minind = min_element(nums.begin(), nums.end()) - nums.begin();
    int maxind = max_element(nums.begin(), nums.end()) - nums.begin();
    if (maxind < minind){
        // negate all the numbers
        for(int i=0;i<N;++i){
            nums[i] = -nums[i];
        }
    }
    int minv = *min_element(nums.begin(), nums.end());
    for(int i=0;i<N;++i){
        answer(i+1, nums[i] - minv + 1);
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...