이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "xylophone.h"
#include <bits/stdc++.h>
#define sz(x) (int)(x.size() )
#define all(x) x.begin(),x.end()
const int MAX = 5010 ;
using namespace std ;
map< pair<int,int> , int > mp ;
void trying(vector<int> &vec )
{
for(int i = 3 ; i < sz(vec) ; i++ )
{
int val12 = abs(vec[i-1]-vec[i-2] ) ;
int val23 = mp[ make_pair(i-1,i) ] ;
int val13 = mp[ make_pair(i-2,i) ] ;
if(val12 + val23 == val13 )
{
vec[i] = vec[i-2] + val13 ;
if( vec[i-1] < vec[i-2] ) vec[i] = vec[i-2] - val13 ;
}
else
{
vec[i] = vec[i-1] + val23 ;
if( vec[i-1] > vec[i-2] ) vec[i] = vec[i-1] - val23 ;
}
}
int mn = *min_element(all(vec) ) ;
for(int &i : vec ) i += 1-mn ;
}
void giveAns(vector<int> vec)
{
for(int i = 1 ; i < sz(vec) ; i++ ) answer(i,vec[i] ) ;
exit(0) ;
}
void solve(int n)
{
int firstAbs = query(1,2) ;
vector<int> seq1(n+1,0) ; //a[1] < a[2]
vector<int> seq2(n+1, 0) ; //a[1] > a[2]
seq1[2] = firstAbs ;
seq2[2] = -firstAbs ;
for(int i = 3 ; i <= n ; i++ )
{
mp[ make_pair(i-2,i) ] = query(i-2, i) ;
mp[ make_pair(i-1,i) ] = query(i-1,i) ;
}
trying(seq1) ;
trying(seq2) ;
int idx1 = -1, idx2 = -1 ;
for(int i = 1 ; i <= n ; i++ )
if(seq1[i] == 1 ) idx1 = i ;
for(int i = 1 ; i <= n ; i++ )
if(seq2[i] == 1 ) idx2 =i ;
if(idx1 == -1 ) giveAns(seq2) ;
if(idx2 == -1 ) giveAns(seq1) ;
if(idx2 > idx1 )
{
if(query(idx2, n) == n-1 ) giveAns(seq2) ;
giveAns(seq1) ;
}
else
{
if(query(idx1, n) == n-1 ) giveAns(seq1);
giveAns(seq2) ;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |