Submission #99764

#TimeUsernameProblemLanguageResultExecution timeMemory
99764jasony123123Xylophone (JOI18_xylophone)C++11
100 / 100
91 ms504 KiB
#define _CRT_SECURE_NO_WARNINGS #include "xylophone.h" #include <bits/stdc++.h> //#include <ext/pb_ds/tree_policy.hpp> //#include <ext/pb_ds/assoc_container.hpp> using namespace std; //using namespace __gnu_pbds; #define FOR(i,start,end) for(int i=start;i<(int)(end);i++) #define FORE(i,start,end) for(int i=start;i<=(int)end;i++) #define RFOR(i,start,end) for(int i = start; i>end; i--) #define RFORE(i,start,end) for(int i = start; i>=end; i--) #define all(a) a.begin(), a.end() #define mt make_tuple #define mp make_pair #define v vector #define sf scanf #define pf printf #define dvar(x) cout << #x << " := " << x << "\n" #define darr(x,n) FOR(i,0,n) cout << #x << "[" << i << "]" << " := " << x[i] << "\n" typedef long long ll; typedef long double ld; typedef pair<int, int > pii; typedef pair<ll, ll> pll; //template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T> void minn(T &a, T b) { a = min(a, b); } template<class T> void maxx(T &a, T b) { a = max(a, b); } void io() { #ifdef LOCAL_PROJECT freopen("input.in", "r", stdin); freopen("output.out", "w", stdout); #else // freopen("rockers.in", "r", stdin); freopen("rockers.out", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); } const ll MOD = 1000000007LL; const ll PRIME = 105943LL; const ll INF = 1e18; /***********************JOI Open 18 - xylophone*****************************/ pii get(v<int> &a) { pii mn = { INT_MAX, -1 }, mx = { INT_MIN, -1 }; FOR(i, 0, a.size()) { minn(mn, { a[i], i }); maxx(mx, { a[i], i }); } return{ mn.second, mx.second }; } void fix(v<int> &a, pii mxn) { int dif = 1 - a[mxn.first]; FOR(i, 0, a.size()) a[i] += dif; } void solve(int N) { v<int> par(N); v<int> dif(N); par[0] = 1; dif[0] = query(0+1, 1+1); FOR(i, 0, N - 2) { dif[i + 1] = query(i + 1+1, i + 2+1); if (dif[i] + dif[i + 1] == query(i+1, i + 2+1)) par[i + 1] = par[i]; else par[i + 1] = par[i] * -1; } v<int> a(N), b(N); a[0] = 0, b[0] = 0; FOR(i, 1, N) { a[i] = a[i - 1] + dif[i - 1] * par[i - 1]; b[i] = b[i - 1] + dif[i - 1] * par[i - 1] * -1; } pii posA = get(a), posB = get(b); if (posA.first < posA.second) { assert(posB.first > posB.second); fix(a, posA); FOR(i, 0, N) answer(i+1, a[i]); } else { assert(posB.first < posB.second); fix(b, posB); FOR(i, 0, N) answer(i+1, b[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...