Submission #58024

# Submission time Handle Problem Language Result Execution time Memory
58024 2018-07-16T15:55:24 Z E869120 Scales (IOI15_scales) C++14
83.0357 / 100
655 ms 748 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 644 ms 384 KB Output is correct
2 Correct 569 ms 488 KB Output is correct
3 Correct 574 ms 488 KB Output is correct
4 Correct 569 ms 572 KB Output is correct
5 Correct 606 ms 572 KB Output is correct
6 Correct 511 ms 576 KB Output is correct
7 Correct 497 ms 672 KB Output is correct
8 Correct 526 ms 672 KB Output is correct
9 Correct 518 ms 672 KB Output is correct
10 Correct 540 ms 672 KB Output is correct
11 Correct 650 ms 672 KB Output is correct
12 Correct 504 ms 672 KB Output is correct
13 Correct 587 ms 672 KB Output is correct
14 Correct 504 ms 672 KB Output is correct
15 Correct 643 ms 672 KB Output is correct
16 Correct 547 ms 672 KB Output is correct
17 Correct 598 ms 672 KB Output is correct
18 Correct 531 ms 748 KB Output is correct
19 Correct 620 ms 748 KB Output is correct
20 Correct 612 ms 748 KB Output is correct
21 Correct 589 ms 748 KB Output is correct
22 Correct 591 ms 748 KB Output is correct
23 Correct 572 ms 748 KB Output is correct
24 Correct 542 ms 748 KB Output is correct
25 Correct 546 ms 748 KB Output is correct
26 Correct 582 ms 748 KB Output is correct
27 Correct 628 ms 748 KB Output is correct
28 Correct 611 ms 748 KB Output is correct
29 Correct 648 ms 748 KB Output is correct
30 Correct 574 ms 748 KB Output is correct
31 Correct 585 ms 748 KB Output is correct
32 Correct 634 ms 748 KB Output is correct
33 Correct 621 ms 748 KB Output is correct
34 Correct 627 ms 748 KB Output is correct
35 Correct 583 ms 748 KB Output is correct
36 Correct 555 ms 748 KB Output is correct
37 Correct 497 ms 748 KB Output is correct
38 Correct 518 ms 748 KB Output is correct
39 Partially correct 581 ms 748 KB Output is partially correct
40 Correct 655 ms 748 KB Output is correct