제출 #333185

#제출 시각아이디문제언어결과실행 시간메모리
333185mohamedsobhi777커다란 상품 (IOI17_prize)C++14
0 / 100
19 ms10108 KiB
#include "prize.h"

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;

vector<int> Qu[200000 + 10];

vector<int> Ask(int i)
{
	if (Qu[i].empty())
		Qu[i] = ask(i);
	return Qu[i];
}

int less(int i, int j)
{
	Ask(i);
	Ask(j);
	if (Qu[i] == Qu[j])
		return 0;
	if (Qu[i][0] + Qu[i][1] > Qu[j][0] + Qu[j][1])
		return 1;
}

int enough;
int solve1(int n)
{
	for (int i = 0; i < n; ++i)
	{
		vector<int> ret = Ask(i);
		if (ret[0] == 0 && ret[1] == 0)
			return i;
	}
}

int freq[200000 + 10];

inline int sum(int i) { return Qu[i][0] + Qu[i][1]; }

int find_best(int n)
{
	if (n <= 5000)
		return solve1(n);

	for (int i = 0; i < 1000; ++i)
	{
		Ask(i);
		freq[Qu[i][0] + Qu[i][1]]++;
		if (Qu[i][0] + Qu[i][1] == 0)
			return i;
	}
	int mc = 0, Max = 0;
	for (int i = 0; i < N; ++i)
	{
		if (freq[i] > Max)
			Max = freq[i], mc = i;
	}
	for (int i = 0; i < n; ++i)
		if (Qu[i][0] + Qu[i][1] != Max)
			++enough;
	for (int i = 1000; i < n; ++i)
	{
		Ask(i);
		if (Qu[i][0] + Qu[i][1] != Max)
		{
			if (Qu[i][0] + Qu[i][1] == 0)
				return i;
			++enough;
			continue;
		}
		int lo = i, hi = n - 1;
		int j = i;
		int bad = -1;
		while (lo <= hi)
		{
			int mid = (lo + hi) >> 1;
			Ask(mid);
			if (sum(mid) != Max || sum(mid) - enough > 0)
				hi = mid - 1;
			else
				j = mid, lo = mid + 1;
		}
		i = j;
	}
}

컴파일 시 표준 에러 (stderr) 메시지

prize.cpp: In function 'int find_best(int)':
prize.cpp:75:7: warning: unused variable 'bad' [-Wunused-variable]
   75 |   int bad = -1;
      |       ^~~
prize.cpp:54:6: warning: variable 'mc' set but not used [-Wunused-but-set-variable]
   54 |  int mc = 0, Max = 0;
      |      ^~
prize.cpp: In function 'int less(int, int)':
prize.cpp:25:1: warning: control reaches end of non-void function [-Wreturn-type]
   25 | }
      | ^
prize.cpp: In function 'int solve1(int)':
prize.cpp:36:1: warning: control reaches end of non-void function [-Wreturn-type]
   36 | }
      | ^
prize.cpp: In function 'int find_best(int)':
prize.cpp:87:1: warning: control reaches end of non-void function [-Wreturn-type]
   87 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...