Submission #58023

# Submission time Handle Problem Language Result Execution time Memory
58023 2018-07-16T15:55:07 Z E869120 Scales (IOI15_scales) C++14
82.4405 / 100
656 ms 744 KB
#include "scales.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
#include <ctime>
using namespace std;
 
// -----------------------------
 
/*int Weight[7], Queries = 0;
 
int getLightest(int A, int B, int C) {
	cout << "Light " << A << " " << B << " " << C << endl;
	Queries++;
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [1]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (Weight[i] == A) V.push_back(make_pair(i, A));
		if (Weight[i] == B) V.push_back(make_pair(i, B));
		if (Weight[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[0].second;
}
int getMedian(int A, int B, int C) {
	cout << "Media " << A << " " << B << " " << C << endl;
	Queries++;
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [2]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (Weight[i] == A) V.push_back(make_pair(i, A));
		if (Weight[i] == B) V.push_back(make_pair(i, B));
		if (Weight[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[1].second;
}
int getHeaviest(int A, int B, int C) {
	//cout << "Heavy " << A << " " << B << " " << C << endl;
	Queries++;
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [3]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (Weight[i] == A) V.push_back(make_pair(i, A));
		if (Weight[i] == B) V.push_back(make_pair(i, B));
		if (Weight[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[2].second;
}
int getNextLightest(int A, int B, int C, int D) {
	cout << "NextL " << A << " " << B << " " << C << " " << D << endl;
	Queries++;
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [3]" << endl;
	vector<pair<int, int>>V; int S = 0;
	for (int i = 1; i <= 6; i++) {
		if (Weight[i] == A) V.push_back(make_pair(i, A));
		if (Weight[i] == B) V.push_back(make_pair(i, B));
		if (Weight[i] == C) V.push_back(make_pair(i, C));
		if (Weight[i] == D) S = i;
	}
	sort(V.begin(), V.end());
	for (int i = 0; i < V.size(); i++) {
		if (V[i].first > S) return V[i].second;
	}
	return V[0].second;
}
void answer(int W[]) {
	for (int i = 0; i < 6; i++) {
		if (W[i] != Weight[i + 1]) { cout << "Wrong Answer [4]" << endl; return; }
	}
	cout << "Accepted : Total Number of Queries = " << Queries << endl;
}*/
 
// -----------------------------
 
// ---------------------------------- 準備用クエリ ---------------------------------------
 
int WWW[7], ret = 0;
 
int _getLightest(int A, int B, int C) {
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [1B]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (WWW[i] == A) V.push_back(make_pair(i, A));
		if (WWW[i] == B) V.push_back(make_pair(i, B));
		if (WWW[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[0].second;
}
int _getMedian(int A, int B, int C) {
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [2B]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (WWW[i] == A) V.push_back(make_pair(i, A));
		if (WWW[i] == B) V.push_back(make_pair(i, B));
		if (WWW[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[1].second;
}
int _getHeaviest(int A, int B, int C) {
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [3B]" << endl;
	vector<pair<int, int>>V;
	for (int i = 1; i <= 6; i++) {
		if (WWW[i] == A) V.push_back(make_pair(i, A));
		if (WWW[i] == B) V.push_back(make_pair(i, B));
		if (WWW[i] == C) V.push_back(make_pair(i, C));
	}
	sort(V.begin(), V.end());
	return V[2].second;
}
int _getNextLightest(int A, int B, int C, int D) {
	if (A <= 0 || A >= 7 || B <= 0 || B >= 7 || C <= 0 || C >= 7 || A == B || B == C || C == A) cout << "Wrong Answer [5B]" << endl;
	vector<pair<int, int>>V; int S = 0;
	for (int i = 1; i <= 6; i++) {
		if (WWW[i] == A) V.push_back(make_pair(i, A));
		if (WWW[i] == B) V.push_back(make_pair(i, B));
		if (WWW[i] == C) V.push_back(make_pair(i, C));
		if (WWW[i] == D) S = i;
	}
	sort(V.begin(), V.end());
	for (int i = 0; i < V.size(); i++) {
		if (V[i].first > S) return V[i].second;
	}
	return V[0].second;
}
 
// ---------------------------------- 準備用クエリ終了 -----------------------------------
 
void init(int T) {
 
}
 
struct State {
	int a[6];
};
 
void orderCoins() {
	srand((unsigned)time(NULL));
	vector<State>U;
	int p[6] = { 1,2,3,4,5,6 };
	do {
		State Y; for (int i = 0; i < 6; i++) Y.a[i] = p[i];
		U.push_back(Y);
	} while (next_permutation(p, p + 6));
 
	vector<pair<int, int>>vec2; vector<int> vec3; int cnt1 = 0;
	while (U.size() >= 2) {
		tuple<int, int, int, int>V; int maxn = 1000;
		for (int i = 1; i <= 6; i++) {
			for (int j = i + 1; j <= 6; j++) {
				for (int k = j + 1; k <= 6; k++) {
					int c1[6] = { 0,0,0,0,0,0 }, c2[6] = { 0,0,0,0,0,0 }, c3[6] = { 0,0,0,0,0,0 };
					for (State x : U) {
						for (int l = 0; l < 6; l++) WWW[l + 1] = x.a[l];
						c1[_getLightest(i, j, k) - 1]++;
						c2[_getMedian(i, j, k) - 1]++;
						c3[_getHeaviest(i, j, k) - 1]++;
					}
					int maxn1 = 0, maxn2 = 0, maxn3 = 0;
					for (int l = 0; l < 6; l++) maxn1 = max(maxn1, c1[l]);
					for (int l = 0; l < 6; l++) maxn2 = max(maxn2, c2[l]);
					for (int l = 0; l < 6; l++) maxn3 = max(maxn3, c3[l]);
 
					for (int m = 1; m <= 6; m++) {
						if (i == m || j == m || k == m) continue;
						int c4[6] = { 0,0,0,0,0,0 };
 
						for (State x : U) {
							for (int l = 0; l < 6; l++) WWW[l + 1] = x.a[l];
							c4[_getNextLightest(i, j, k, m) - 1]++;
						}
 
						int maxn4 = 0;
						for (int l = 0; l < 6; l++) maxn4 = max(maxn4, c4[l]);
						if (maxn4 < maxn || (maxn4 == maxn && rand() % 10 == 0)) { maxn = maxn4; V = make_tuple(i, j, k, m); }
					}
 
					if (maxn3 < maxn || (maxn3 == maxn && rand() % 10 == 0)) { maxn = maxn3; V = make_tuple(-3, i, j, k); }
					if (maxn1 < maxn || (maxn1 == maxn && rand() % 10 <= 0)) { maxn = maxn1; V = make_tuple(-1, i, j, k); }
					if (maxn2 < maxn || (maxn2 == maxn && rand() % 10 <= 0)) { maxn = maxn2; V = make_tuple(-2, i, j, k); }
				}
			}
		}
		if (cnt1 == 0) { V = make_tuple(-1, 1, 2, 3); }
		if (cnt1 == 1) { V = make_tuple(-2, 4, 5, 6); }
		if (cnt1 == 2) {
			vector<int>vec4; for (int i = 1; i <= 6; i++) { if (i != vec3[0] && i != vec3[1])vec4.push_back(i); }
			V = make_tuple(vec4[0], vec4[1], vec4[2], vec3[1]);
			//cout << vec3[0] << " " << vec3[1] << endl;
		}
		if (get<0>(V) == -1) {
			int Z = getLightest(get<1>(V), get<2>(V), get<3>(V)); if (cnt1 <= 1) vec3.push_back(Z);
			vector<State>US;
			for (State x : U) {
				for (int i = 0; i < 6; i++) WWW[i + 1] = x.a[i];
				int F = _getLightest(get<1>(V), get<2>(V), get<3>(V));
				if (F == Z) US.push_back(x);
			}
			U = US;
		}
		if (get<0>(V) == -2) {
			int Z = getMedian(get<1>(V), get<2>(V), get<3>(V)); if (cnt1 <= 1) vec3.push_back(Z);
			vector<State>US;
			for (State x : U) {
				for (int i = 0; i < 6; i++) WWW[i + 1] = x.a[i];
				int F = _getMedian(get<1>(V), get<2>(V), get<3>(V));
				if (F == Z) US.push_back(x);
			}
			U = US;
		}
		if (get<0>(V) == -3) {
			int Z = getHeaviest(get<1>(V), get<2>(V), get<3>(V));
			vector<State>US;
			for (State x : U) {
				for (int i = 0; i < 6; i++) WWW[i + 1] = x.a[i];
				int F = _getHeaviest(get<1>(V), get<2>(V), get<3>(V));
				if (F == Z) US.push_back(x);
			}
			U = US;
		}
		if (get<0>(V) >= 1) {
			int Z = getNextLightest(get<0>(V), get<1>(V), get<2>(V), get<3>(V));
			vector<State>US;
			for (State x : U) {
				for (int i = 0; i < 6; i++) WWW[i + 1] = x.a[i];
				int F = _getNextLightest(get<0>(V), get<1>(V), get<2>(V), get<3>(V));
				if (F == Z) US.push_back(x);
			}
			U = US;
		}
		vec2.push_back(make_pair(U.size(), maxn));
		cnt1++;
	}
	if (cnt1 >= 7) {
		ret++;
	}
	//for (int i = 0; i < vec2.size(); i++) cout << "->" << vec2[i].first << " " << vec2[i].second << endl;
	int WW[6]; for (int i = 0; i < 6; i++) WW[i] = U[0].a[i];
	answer(WW);
}

Compilation message

In file included from grader.c:2:0:
graderlib.c: In function 'void answer(int*)':
graderlib.c:53:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
     if (_ghksjhdfkae19ga_ > 1) 
     ^~
graderlib.c:56:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
  for (i = 0; i < 6; i++) {
  ^~~
scales.cpp: In function 'int _getNextLightest(int, int, int, int)':
scales.cpp:125:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < V.size(); i++) {
                  ~~^~~~~~~~~~
scales.cpp: In function 'void init(int)':
scales.cpp:133:15: warning: unused parameter 'T' [-Wunused-parameter]
 void init(int T) {
               ^
# Verdict Execution time Memory Grader output
1 Correct 645 ms 384 KB Output is correct
2 Correct 620 ms 484 KB Output is correct
3 Correct 638 ms 576 KB Output is correct
4 Correct 607 ms 632 KB Output is correct
5 Correct 577 ms 632 KB Output is correct
6 Correct 603 ms 632 KB Output is correct
7 Partially correct 646 ms 632 KB Output is partially correct
8 Correct 526 ms 632 KB Output is correct
9 Correct 653 ms 632 KB Output is correct
10 Correct 635 ms 632 KB Output is correct
11 Correct 515 ms 668 KB Output is correct
12 Correct 560 ms 668 KB Output is correct
13 Correct 618 ms 668 KB Output is correct
14 Correct 591 ms 668 KB Output is correct
15 Correct 530 ms 668 KB Output is correct
16 Correct 656 ms 684 KB Output is correct
17 Partially correct 524 ms 684 KB Output is partially correct
18 Correct 567 ms 684 KB Output is correct
19 Correct 575 ms 684 KB Output is correct
20 Correct 565 ms 684 KB Output is correct
21 Correct 541 ms 684 KB Output is correct
22 Correct 615 ms 684 KB Output is correct
23 Correct 549 ms 684 KB Output is correct
24 Correct 531 ms 684 KB Output is correct
25 Correct 590 ms 684 KB Output is correct
26 Correct 525 ms 684 KB Output is correct
27 Correct 609 ms 684 KB Output is correct
28 Correct 577 ms 744 KB Output is correct
29 Correct 589 ms 744 KB Output is correct
30 Correct 625 ms 744 KB Output is correct
31 Correct 560 ms 744 KB Output is correct
32 Correct 594 ms 744 KB Output is correct
33 Correct 529 ms 744 KB Output is correct
34 Correct 535 ms 744 KB Output is correct
35 Correct 507 ms 744 KB Output is correct
36 Correct 541 ms 744 KB Output is correct
37 Partially correct 584 ms 744 KB Output is partially correct
38 Correct 549 ms 744 KB Output is correct
39 Correct 580 ms 744 KB Output is correct
40 Correct 512 ms 744 KB Output is correct