제출 #1290659

#제출 시각아이디문제언어결과실행 시간메모리
1290659mhaerXylophone (JOI18_xylophone)C++20
100 / 100
27 ms468 KiB
#include "xylophone.h" #include <bits/stdc++.h> #define ll long long // #define Fin(a) cout << #a << " "; for (int& i : a) {cout << i << " ";}cout << "\n"; using namespace std; static int A[5000]; set<int> found; void solve(int N) { vector<int> fark1(N); vector<int> fark2(N-1); for (int i = 1;i <= N-1;i++) { fark1[i] = query(i, i+1); } for (int i = 1;i <= N-2;i++) { fark2[i] = query(i, i+2); } vector<bool> direction(N); for (int i = 1;i <= N-2;i++) { direction[i+1] = direction[i]; if (fark2[i] != (fark1[i] + fark1[i+1])) { direction[i+1] = !direction[i+1]; } } vector<int> pref(N); // for (bool i : direction) { // cout << i << " "; // } // cout << "\n"; for (int i = 1;i < N;i++) { fark1[i] *= (direction[i] == 1 ? (-1) : 1); } // cout << "a "; // for (int i : fark1) cout << i << " "; // cout << "\n"; for (int i = 1;i <N;i++) { pref[i] = pref[i-1] + fark1[i]; } int min_ = 0; int max_ = 0; for (int i = 0;i < N;i++) { if (pref[i] > pref[max_]) { max_ = i; } if (pref[i] < pref[min_]) { min_ = i; } } int c = pref[max_]; for (int& i : pref) i -= (c - N); if (min_ > max_) { // cout << "Yeah\n"; for (int& i : pref) i = N-i+1; } // cout << "bbb "; // for (int i : pref) cout << i << " "; // cout << "\n"; // for (int i : direction) cout << i << " "; // cout << "\n"; for (int i = 0;i < N;i++) { // cout << "At " << i << "\n"; answer(i+1, pref[i]); } // for (int i : pref) cout << i << " "; // cout << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...