제출 #427458

#제출 시각아이디문제언어결과실행 시간메모리
427458MonchitoHighway Tolls (IOI18_highway)C++14
6 / 100
200 ms4232 KiB
#include "highway.h"
using namespace std;

#define sz(x) (int)x.size()

const int MAXN = 9e4;

int M;
vector<pair<int,int>> G[MAXN];
bool vis[MAXN];

vector<int> p;
long long cost;

/*
void DFS(int u, int& ans) {
	vis[u] = true;

	for(pair<int,int> v : G[u]) {
		if(!vis[v.first]) {
			p[v.second] = 1;
			if(ask(p) > cost) {
				p[v.second] = 0;
				DFS(v.first, ans);			
				return;
			}
		}	
	}

	ans = u;
}
*/

int bs1() {
	int l=1, r=M, mid, ret=-1;
	while(r >= l) {
		mid = l + (r-l)/2;		

		for(int i=0; i<mid; i++) p[i] = 1;

		if(ask(p) > cost) {
			r = mid-1;
			ret = mid-1;
		} 

		else l = mid+1;	

		for(int i=0; i<mid; i++) p[i] = 0;
	}

	return ret;
}

int bs2() {
	int l=1, r=M, mid, ret=-1;
	while(r >= l) {
		mid = l + (r-l)/2;		

		for(int i=M-1; i>=M-mid; i--) p[i] = 1;

		if(ask(p) > cost) {
			r = mid-1;
			ret = M-mid;
		} 

		else l = mid+1;	

		for(int i=M-1; i>=M-mid; i--) p[i] = 0;
	}

	return ret;
}

void find_pair(int N, vector<int> U, vector<int> V, int A, int B) {	
	M = sz(U);
	p = vector<int>(M, 0);

	cost = ask(p);

	int s = U[bs1()], t = V[bs2()];
	answer(s, t);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...