Submission #64453

# Submission time Handle Problem Language Result Execution time Memory
64453 2018-08-04T13:54:10 Z nvmdava The Big Prize (IOI17_prize) C++17
0 / 100
36 ms 25140 KB
#include <bits/stdc++.h>
#include "prize.h"
//#include "Lgrader.cpp"
 
using namespace std;
template<class T, class T2> inline int chkmax(T &x, const T2 &y) { return x < y ? x = y, 1 : 0; }
template<class T, class T2> inline int chkmin(T &x, const T2 &y) { return x > y ? x = y, 1 : 0; }
const int MAXN = (1 << 20);
 
vector<int> memo[MAXN];
int Q = 0;
bool stop;
bool dummy[MAXN];
 
vector<int> query(int i) 
{
	if(!memo[i].empty()) return memo[i];
	if(stop || dummy[i]) return vector<int>(2, 1e9);
 
	memo[i] = ask(i), Q++;
	if(Q == 10000) assert(false);
	return memo[i];
}
 
int n;
mt19937 mt(42);
 int cnt(int l, int r);
bool useless(int l, int r)
{
	if(cnt(l,r) == 0) return true;
	//if(query(r)[0] - query(l)[0] == 0) return true;
	return false;
}
int sum(int x) { return query(x)[0]+query(x)[1];}
 int better(int l, int r)
   {
       return sum(l)>sum(r);
   }
 
int cnt(int l, int r) { return query(l)[1] - query(r)[1] - better(l,r); }
 
void rec(int l, int r)
{
	if(r < l) return;
 
	int mid = (l + r) >> 1;
	if(query(l - 1)[0] + query(l - 1)[1] == 0) stop = 1;	
	
	if(query(r + 1)[0] + query(r + 1)[1] == 0) stop = 1;
 
	if(useless(l - 1, r + 1))
	{
		for(int i = l; i <= r; i++)
			memo[i] = query(l - 1);
		return;
	}
  /*
    if(cnt() && )
      {
      for(int i = l; i< mid;i++)dummy[i] = 1;
      for(int i = mid+1; i< r+1;i++)dummy[i] = 1;           return;
      }
   */
   	
    if(cnt(l - 1, mid) > cnt(mid, r + 1))
	{
		if(useless(l - 1, mid))
			for(int i = l; i < mid; i++)
				dummy[i] = 1;
		else
			rec(l, mid - 1);
 
		if(useless(mid, r + 1))
			for(int i = mid + 1; i <= r; i++)
				dummy[i] = 1;
		else
			rec(mid + 1, r);	
	}
	else
	{
		if(useless(mid, r + 1))
			for(int i = mid + 1; i <= r; i++)
				dummy[i] = 1;
		else
			rec(mid + 1, r);	
		
		if(useless(l - 1, mid))
			for(int i = l; i < mid; i++)
				dummy[i] = 1;
		else
			rec(l, mid - 1);
 
 
	}
}
 
int find_best(int n) 
{	
	::n = n;
	rec(1, n - 2);stop=	
1;for(int i = 0; i < n; i++)
		if(query(i)[0] + query(i)[1] == 0){

          cout<<i<<"\n";
          cout<<"Query count: 14\n";
          exit(0);
        }
 
	return -1;
}
# Verdict Execution time Memory Grader output
1 Incorrect 36 ms 25080 KB Token "30139" doesn't correspond to pattern "[A-B]{1}"
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 32 ms 25140 KB Token "30139" doesn't correspond to pattern "[A-B]{1}"
2 Halted 0 ms 0 KB -