답안 #62158

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
62158 2018-07-27T15:24:20 Z reality Hotter Colder (IOI10_hottercolder) C++17
87 / 100
2351 ms 9760 KB
#include "grader.h"
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define ll long long
#define dbg(v) cerr<<#v<<" = "<<v<<'\n'
#define vi vector<int>
#define vl vector <ll>
#define pii pair<int,int>
#define mp make_pair
#define db long double
#define pb push_back
#define all(s) s.begin(),s.end()
template < class T > T smin(T &a,T b) {if (a > b) a = b;return a;}
template < class T > T smax(T &a,T b) {if (a < b) a = b;return a;}
int step = 0;
const int MX = 130;
const int C = 53;
int dp[MX][MX][MX];
int fr[MX][MX][MX];
int f(int a,int b,int c) {
	if (a >= b)
		return 0;
	if (dp[a][b][c] != 1e9)
		return dp[a][b][c];
	int &ans = dp[a][b][c];
	for (int k = a;k <= b;++k)
		if (k != c) {
			int l = min(k,c);
			int r = max(k,c);
			int m1 = (l + r - 1) / 2;
			int m2 = (l + r) / 2 + 1;
			if (ans > max(f(a,m1,k),f(m2,b,k)) + 1)
				ans = max(f(a,m1,k),f(m2,b,k)) + 1,fr[a][b][c] = k;
		}
	return ans;
}
int HC(int N) {
	if (N == 1)
		return 1;
	++step;
	if (step == 1) {
		for (int i = 1;i < C;++i)
			for (int j = 1;j < C;++j)
				for (int k = 1;k < C;++k)
					dp[i][j][k] = 1e9;
	}
	srand(N * step);
	int l = 1,r = N,was = 0;
	while (l < r) {
		int m = (l + r) / 2;
		if (m == was) {
			if (m + 1 <= r)
				++m;
			else
				--m;
		}
		if (!was) {
			Guess(m + 1);
			was = m + 1;
		}
		int cnt = Guess(m);
		if (!cnt)
			return ((m + was) / 2);
		int m1 = (m + was - 1) / 2;
		int m2 = (m + was) / 2 + 1;
		if (m > was)
			cnt *= -1;
		if (cnt == 1)
			r = m1;
		else
			l = m2;
		was = m;
	}
	return l;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 229 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 222 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 223 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 2351 ms 9760 KB Output is partially correct - alpha = 0.500000000000