Submission #1272724

#TimeUsernameProblemLanguageResultExecution timeMemory
1272724coderpemulaXylophone (JOI18_xylophone)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii pair<int,int>
#define pb push_back

using namespace std;
bool vis[10001];
signed main()
{
	int n,i,j,t;
	cin>>n;
	int ans[n+1];
	vis[1] = vis[0] = true;
	for(i=n+1;i<=2*n;i++) vis[i] = true;
	int now = 1,id = 2,x;
	while(true){
		if(id == n-1){
			now = id;
			break;
		}
		cout<<"query("<<id<<","<<n<<")"<<endl;
		cin>>x;
		if(x == n-1) now = id,id++;
		else break;
	}
	ans[now] = 1;
	int one = now;
	// traverse right
	if(now == n-1) ans[n] = n;
	else{
		id = now+1;
		cout<<"query("<<now<<","<<id<<")"<<endl;
		cin>>x;
		ans[id] = x+1;
		while(true){
			if(id == n) break;
			cout<<"query("<<id<<","<<id+1<<")"<<endl;
			cin>>x;
			// might be ans[id]+x or ans[id]-x
			// so we check bos
			if(ans[id]-x <= 1){
				ans[id+1] = ans[id]+x;
				vis[ans[id+1]] = true;
				id++;
				continue;
			}
			if(vis[ans[id]-x]){
				ans[id+1] = ans[id]+x;
				vis[ans[id+1]] = true;
				id++;
				continue;
			}
			if(vis[ans[id]+x]){
				ans[id+1] = ans[id]-x;
				vis[ans[id+1]] = true;
				id++;
				continue;
			}
			if(ans[id]+x == n){
				ans[id+1] = n;
				vis[ans[id+1]] = true;
				id++;
				continue;
			}
			// kita gatau ini + atau - jadi kita cek
			int bil = x;
			cout<<"query("<<id-1<<","<<id+1<<")"<<endl;
			cin>>x;
			if(ans[id-1] < ans[id]){
				// min max
				if(x == ans[id] - ans[id-1]){
					// berarti middle
					ans[id+1] = ans[id]-bil;
					vis[ans[id+1]] = true;
					id++;
					continue;
				}
				if(x == bil){
					ans[id+1] = ans[id]-bil;
					vis[ans[id+1]] = true;
					id++;
					continue;
				}
				ans[id+1] = ans[id]+bil;
				vis[ans[id+1]] = true;
				id++;
			}
			else{
				if(x == ans[id-1] - ans[id]){
					ans[id+1] = ans[id]+bil;
					vis[ans[id+1]] = true;
					id++;
					continue;
				}
				if(x == bil){
					ans[id+1] = ans[id]+bil;
					vis[ans[id+1]] = true;
					id++;
					continue;
				}
				ans[id+1] = ans[id]-bil;
				vis[ans[id+1]] = true;
				id++;
			}
		}
	}
	if(now > 1){
		id = now-1;
		cout<<"query("<<id<<","<<now<<")"<<endl;
		cin>>x;
		ans[id] = x+1;
		while(true){
			if(id == 1) break;
			cout<<"query("<<id-1<<","<<id<<")"<<endl;
			cin>>x;
			if(ans[id]-x <= 1){
				ans[id-1] = ans[id]+x;
				vis[ans[id-1]] = true;
				id--;
				continue;
			}
			if(vis[ans[id]-x]){
				ans[id-1] = ans[id]+x;
				vis[ans[id-1]] = true;
				id--;
				continue;
			}
			if(vis[ans[id]+x]){
				ans[id-1] = ans[id]-x;
				vis[ans[id-1]] = true;
				id--;
				continue;
			}
			// kita gatau
			int bil = x;
			cout<<"query("<<id-1<<","<<id+1<<")"<<endl;
			cin>>x;
			if(ans[id+1] > ans[id]){
				// min max
				if(x == ans[id+1]-ans[id]){
					ans[id-1] = ans[id]+bil;
					vis[ans[id-1]] = true;
					id--;
					continue;
				}
				if(x > bil){
					ans[id-1] = ans[id]-bil;
					vis[ans[id-1]] = true;
					id--;
					continue;
				}
				ans[id-1] = ans[id]+bil;
				vis[ans[id-1]] = true;
				id--;
			}
			else{
				// max min
				if(x == ans[id]-ans[id+1]){
					ans[id-1] = ans[id]-bil;
					vis[ans[id-1]] = true;
					id--;
					continue;
				}
				if(bil == x){
					ans[id-1] = ans[id]-bil;
					vis[ans[id-1]] = true;
					id--;
					continue;
				}
				ans[id-1] = ans[id]+bil;
				vis[ans[id-1]] = true;
				id--;
			}
		}
	}
	for(i=1;i<=n;i++) cout<<"answer("<<i<<","<<ans[i]<<")"<<endl;
	
	return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/cc48JfxW.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccUPPXdV.o:xylophone.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc48JfxW.o: in function `main':
grader.cpp:(.text.startup+0x30): undefined reference to `solve(int)'
collect2: error: ld returned 1 exit status