제출 #502379

#제출 시각아이디문제언어결과실행 시간메모리
502379vrohakXylophone (JOI18_xylophone)C++14
0 / 100
0 ms200 KiB
#include <bits/stdc++.h>
#include "xylophone.h"

using namespace std;

/*int query (int a,int b){
	cout<<a<<" "<<b<<endl;
	int pes;
	cin>>pes;
	return pes;
		
}*/

void solve (int n){
	
//ako je x pozitivan //ako je x pozitivan //ako je x pozitivan //ako je x pozitivan //ako je x pozitivan //ako je x pozitivan //ako je x pozitivan //ako je x pozitivan 
	
		int rj1[n + 65], l1, l2, l3, stg1 = 0;	rj1[1]=0;
		int odg1 = query (1, 2);	l1=odg1;
		int odg2 = query (2, 3);	l2=odg2;
		int odg3 = query (1, 3);	l3=odg3;
		odg2 = rj1[2] = odg1;
		
		int od1[n + 65], od2[n + 56], od3[n + 99];
		for (int i = 3; i < n + 1; i++){
			odg1 = odg2;		odg2 = query(i-1, i);		odg3 = query(i-2, i);
			od1[i]=odg1;		od2[i]=odg2;				od3[i]=odg3;
			
			if (stg1 == 0){
				if (odg3 == odg2 + odg1){
					rj1[i] = rj1[i - 1] + odg2;
				}
				else {
					stg1 = 1;
					rj1[i] = rj1[i - 1] - odg2;
				}
			}
			else {
				if (odg3 == odg2 + odg1){
					rj1[i] = rj1[i - 1] - odg2;
				}
				else {
					stg1 = 0;
					rj1[i] = rj1[i - 1] + odg2;
				}
			}
		}
		
		int pt1 = query (1, n), mini1 = 0x3f3f3f3f;
		for (int i = 1; i < n + 1; i++){
			mini1 = min(mini1 , rj1[i]);
		}
		mini1 = mini1*(-1) + 1;
		for (int i = 1; i < n + 1; i++){
			rj1[i] = rj1[i] + mini1;
		}
		
//ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan //ako je x negativan 
	
		int rj2[n+65];		rj2[1]=0;
		int stg2 = 1;		int odg11 = l1;			int odg22 = l2;			int odg33 = l3; 		rj2[2] = (-1)*odg11;
		if (odg33 == odg22 + odg11){
			rj2[3] = odg11 + odg22;		rj2[3]*=(-1);
		}
		else {
			stg2 = 0;
			rj2[3] = rj2[2] + odg22;
		}
		
		for (int i = 4; i < n+1; i++){
			odg11 = od1[i];		odg22 = od2[i];		odg33 = od3[i];
			if (stg2 == 0){
				if (odg33 == odg22 + odg11){
					rj2[i] = rj2[i - 1] + odg22;
				}
				else {
					stg2 = 1;
					rj2[i] = rj2[i - 1] - odg22;
				}
			}
			else {
				if (odg33 == odg22 + odg11){
					rj2[i] = rj2[i - 1] - odg22;
				}
				else {
					stg2 = 0;
					rj2[i] = rj2[i - 1] + odg22;
				}
			}
		}
		
		int mini2 = 0x3f3f3f3f;
		for (int i = 1; i < n + 1; i++){
			mini2 = min(mini2, rj2[i]);
		}
		mini2 = mini2*(-1) + 1;
		for (int i = 1; i < n + 1; i++){
			rj2[i] = rj2[i] + mini2;
		}
		
// < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis > < ispis >
		
		int mp1 = 0, mp2 = 0, pro = 0, niz[n + 55];
			memset(niz, 0, sizeof niz);
		for (int i = 1; i < n + 1; i++){
			if (rj1[i] == 1){
				pro++;
			}
			if (rj1[i] == n and pro == 0){
				mp1++;
				break;
			}
		}
		
		for (int i = 1; i < n + 1; i++){
			niz[rj1[i]]++;
		}
		for (int i = 1; i < n + 1; i++){
			if (niz[i] == 0){
				mp2 = 1;
			}
		}
		
		if (pt1 == n - 1 and mp1 == 0 and mp2 == 0){
			for (int i = 1; i < n + 1; i++){
				answer(i,rj1[i]); 
			}
		}
		else {
			for (int i = 1; i < n + 1; i++){
				answer(i,rj2[i]); 
			}
		}
		
	return;
}

/*int main (){
	
	int n;
	cin>>n;
	solve(n);
	
	return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...