Submission #58022

# Submission time Handle Problem Language Result Execution time Memory
58022 2018-07-16T15:54:51 Z E869120 Scales (IOI15_scales) C++14
80.3571 / 100
771 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 647 ms 388 KB Output is correct
2 Correct 587 ms 444 KB Output is correct
3 Correct 675 ms 540 KB Output is correct
4 Correct 585 ms 540 KB Output is correct
5 Correct 534 ms 540 KB Output is correct
6 Correct 559 ms 540 KB Output is correct
7 Partially correct 556 ms 540 KB Output is partially correct
8 Correct 687 ms 540 KB Output is correct
9 Correct 722 ms 540 KB Output is correct
10 Partially correct 621 ms 540 KB Output is partially correct
11 Correct 665 ms 540 KB Output is correct
12 Correct 679 ms 620 KB Output is correct
13 Correct 700 ms 620 KB Output is correct
14 Correct 608 ms 620 KB Output is correct
15 Correct 609 ms 620 KB Output is correct
16 Correct 537 ms 620 KB Output is correct
17 Correct 649 ms 620 KB Output is correct
18 Correct 655 ms 628 KB Output is correct
19 Correct 685 ms 720 KB Output is correct
20 Partially correct 589 ms 720 KB Output is partially correct
21 Partially correct 771 ms 720 KB Output is partially correct
22 Partially correct 583 ms 720 KB Output is partially correct
23 Correct 528 ms 720 KB Output is correct
24 Correct 696 ms 720 KB Output is correct
25 Correct 666 ms 720 KB Output is correct
26 Correct 652 ms 720 KB Output is correct
27 Partially correct 623 ms 720 KB Output is partially correct
28 Correct 593 ms 720 KB Output is correct
29 Correct 592 ms 720 KB Output is correct
30 Correct 576 ms 720 KB Output is correct
31 Correct 730 ms 720 KB Output is correct
32 Correct 569 ms 720 KB Output is correct
33 Partially correct 598 ms 720 KB Output is partially correct
34 Correct 504 ms 720 KB Output is correct
35 Correct 637 ms 720 KB Output is correct
36 Correct 517 ms 720 KB Output is correct
37 Partially correct 576 ms 748 KB Output is partially correct
38 Partially correct 697 ms 748 KB Output is partially correct
39 Partially correct 657 ms 748 KB Output is partially correct
40 Correct 504 ms 748 KB Output is correct