Submission #65416

#TimeUsernameProblemLanguageResultExecution timeMemory
65416boookCave (IOI13_cave)C++14
12 / 100
1374 ms560 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define REP(i,j,k)     for(int i = j ; i < k ; ++i)
#define RREP(i,j,k)    for(int i = j ; i >=k ; --i)
#define A    first
#define B    second
#define mp   make_pair
#define pb   emplace_back
#define PII pair<int , int>
#define MEM(i,j)   memset(i , j , sizeof i)
#define ALL(i)     i.begin() , i.end()
#define DBGG(i,j)     cout << i << " " << j << endl
#define DB4(i,j,k,l)  cout << i << " " << j << " " << k << " " << l << endl
#define IOS cin.tie(0) , cout.sync_with_stdio(0)
#define endl "\n"
///------------------------------------------------------------
#include "cave.h"
#define MAX 
#define INF 0x3f3f3f3f

int nn , mah[5000] , ans[5000] , base[5000] , val[5000] , use[5050] , pre;
int query(int x[]){
	int ans = tryCombination(x);
	if(ans == -1) return nn + 1;
	else return ans;
}
void exploreCave(int n){
	nn = n;
	REP(i , 0 , n){
		pre = query(base);
		// REP(i , 0 , n) cout << base[i] << " "; cout << endl;
		// DBGG("pre = " , pre);
		int can = -1;
		RREP(j , 13 , 0){
			int to = can + (1 << j) , cnt = 0;
			REP(ii , 0 , n) val[ii] = base[ii];

			REP(ii , 0 , n) if(cnt < to && use[ii] == 0){
				cnt ++;
				val[ii] = base[ii] ^ 1;
			}

			// if(cnt == to){

			// 	cout << "now to = " << to << " ->";
			// 	REP(ii , 0 , n) cout << val[ii] << " "; cout << endl;
			// 	DBGG("get = " , query(val));
			// }
			if(cnt == to && (query(val) > i) == (pre > i)) can = to;
		}
		while(use[can] == 1) can ++;
		// DBGG("can = " , can);
		use[can] = 1;
		ans[can] = pre > i ? base[can] : 1 - base[can];
		mah[can] = i;
		
		base[can] = ans[can];
		// REP(i , 0 , n) cout << base[i] << " "; cout << endl;
		// if(i == 1) 
		// 	break;
	}
	answer(ans , mah);
}
#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...