# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
58023 |
2018-07-16T15:55:07 Z |
E869120 |
Scales (IOI15_scales) |
C++14 |
|
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 |