제출 #50079

#제출 시각아이디문제언어결과실행 시간메모리
50079Benq저울 (IOI15_scales)C++14
71.43 / 100
550 ms856 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef complex<ld> cd; typedef pair<int, int> pi; typedef pair<ll,ll> pl; typedef pair<ld,ld> pd; typedef vector<int> vi; typedef vector<ld> vd; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; typedef vector<cd> vcd; template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; #define FOR(i, a, b) for (int i=a; i<(b); i++) #define F0R(i, a) for (int i=0; i<(a); i++) #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--) #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--) #define sz(x) (int)(x).size() #define mp make_pair #define pb push_back #define f first #define s second #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() const int MOD = 1000000007; const ll INF = 1e18; const int MX = 100001; /*int num = 0, val[7]; bool cmp(int a, int b) { return val[a] < val[b]; } int getR(vi a, int b) { sort(all(a),cmp); return a[b]; } int getLightest(int A, int B, int C) { return getR({A,B,C},0); } int getHeaviest(int A, int B, int C) { return getR({A,B,C},2); } int getMedian(int A, int B, int C) { return getR({A,B,C},1); } int getNextLightest(int A, int B, int C, int D) { vi z = {A,B,C}; sort(all(z),cmp); F0R(i,3) if (cmp(D,z[i])) return z[i]; return z[0]; } void answer(int* cur) { F0R(i,6) cout << cur[i] << " "; cout << "\n"; }*/ #include "scales.h" void init(int T) {} vi insEnd(vi cur, int x) { int t = getMedian(cur[0],cur[2],x); if (t == cur[0]) cur.insert(cur.begin(),x); else cur.pb(x); return cur; } vi ins(vi cur, int x) { int t = getNextLightest(cur[0],cur[sz(cur)/2],cur[sz(cur)-1],x); if (t == cur[0]) return insEnd(cur,x); if (t == cur[sz(cur)/2]) { if (sz(cur) == 3) { cur.insert(cur.begin()+1,x); } else { if (getHeaviest(cur[0],cur[1],x) == x) cur.insert(cur.begin()+2,x); else cur.insert(cur.begin()+1,x); } } else { if (sz(cur) <= 4) { cur.insert(cur.begin()+sz(cur)/2+1,x); } else { if (getHeaviest(cur[2],cur[3],x) == x) cur.insert(cur.begin()+4,x); else cur.insert(cur.begin()+3,x); } } return cur; } vector<vi> al; bitset<720> posi; int eval(int x, vi v, bool b = 0) { vi VAL(7); F0R(i,6) { VAL[al[x][i]] = i; //if (b) cout << "OOPS " << x << " " << al[x][i] << "\n"; } /*if (b) { cout << "OOPS\n"; FOR(i,1,7) cout << val[i] << " "; cout << "\n"; cout << v[0] << "\n"; }*/ if (v[0] <= 0) { //if (b) cout << "TT " << VAL[1] << " " << VAL[2] << " " << VAL[3] << " " << VAL[4] << " " << VAL[5] << " " << VAL[6] << " " << v[1] << " " << v[2] << " " << v[3] << " " << VAL[v[1]] << " " << VAL[v[2]] << " " << VAL[v[3]] << "\n"; vi z = {v[1],v[2],v[3]}; sort(all(z),[&VAL](int a, int b) { return VAL[a] < VAL[b]; }); //if (b) cout << "TT " << v[1] << " " << v[2] << " " << v[3] << " " << VAL[v[1]] << " " << VAL[v[2]] << " " << VAL[v[3]] << "\n"; return z[-v[0]]; } vi z = {v[0],v[1],v[2]}; sort(all(z),[&VAL](int a, int b) { return VAL[a] < VAL[b]; }); F0R(i,3) if (VAL[z[i]] > VAL[v[3]]) return z[i]; return v[0]; } int test(int a, int b, int c, int d) { vi co(7); int mx = 0; F0R(i,720) if (posi[i]) co[eval(i,{a,b,c,d})] ++; F0R(i,7) mx = max(mx,co[i]); return mx; } void orderCoins() { /*FOR(i,1,7) { int x; cin >> x; val[x] = i; }*/ al.clear(); vi z = {1,2,3,4,5,6}; do { al.pb(z); } while (next_permutation(all(z))); F0R(i,720) posi[i] = 1; pair<int,vi> bes = {MOD,{}}; while (posi.count() > 1) { //cout << posi.count() << "\n"; FOR(a,1,7) FOR(b,1,7) FOR(c,b+1,7) FOR(d,c+1,7) if (a != b && a != c && a != d) bes = min(bes,{test(a,b,c,d),{a,b,c,d}}); F0R(z,3) FOR(b,1,7) FOR(c,b+1,7) FOR(d,c+1,7) bes = min(bes,{test(-z,b,c,d),{-z,b,c,d}}); if (bes.s[0] == 0) { int x = getLightest(bes.s[1],bes.s[2],bes.s[3]); F0R(i,720) if (posi[i] && eval(i,bes.s) != x) posi[i] = 0; } else if (bes.s[0] == -1) { int x = getMedian(bes.s[1],bes.s[2],bes.s[3]); F0R(i,720) if (posi[i] && eval(i,bes.s) != x) posi[i] = 0; } else if (bes.s[0] == -2) { int x = getHeaviest(bes.s[1],bes.s[2],bes.s[3]); F0R(i,720) if (posi[i] && eval(i,bes.s) != x) posi[i] = 0; } else { int x = getNextLightest(bes.s[0],bes.s[1],bes.s[2],bes.s[3]); F0R(i,720) if (posi[i] && eval(i,bes.s) != x) posi[i] = 0; } // break; } int* res = new int[6]; F0R(i,720) if (posi[i]) F0R(j,6) res[j] = al[i][j]; answer(res); }

컴파일 시 표준 에러 (stderr) 메시지

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 'void init(int)':
scales.cpp:76:15: warning: unused parameter 'T' [-Wunused-parameter]
 void init(int T) {}
               ^
scales.cpp: In lambda function:
scales.cpp:123:65: warning: declaration of 'int b' shadows a parameter [-Wshadow]
         vi z = {v[1],v[2],v[3]}; sort(all(z),[&VAL](int a, int b) { return VAL[a] < VAL[b]; });
                                                                 ^
scales.cpp:109:32: note: shadowed declaration is here
 int eval(int x, vi v, bool b = 0) {
                                ^
scales.cpp: In lambda function:
scales.cpp:127:61: warning: declaration of 'int b' shadows a parameter [-Wshadow]
     vi z = {v[0],v[1],v[2]}; sort(all(z),[&VAL](int a, int b) { return VAL[a] < VAL[b]; });
                                                             ^
scales.cpp:109:32: note: shadowed declaration is here
 int eval(int x, vi v, bool b = 0) {
                                ^
scales.cpp: In function 'int eval(int, vi, bool)':
scales.cpp:109:32: warning: unused parameter 'b' [-Wunused-parameter]
scales.cpp: In function 'void orderCoins()':
scales.cpp:158:13: warning: declaration of 'z' shadows a previous local [-Wshadow]
         F0R(z,3) FOR(b,1,7) FOR(c,b+1,7) FOR(d,c+1,7) bes = min(bes,{test(-z,b,c,d),{-z,b,c,d}});
             ^
scales.cpp:26:28: note: in definition of macro 'F0R'
 #define F0R(i, a) for (int i=0; i<(a); i++)
                            ^
scales.cpp:146:8: note: shadowed declaration is here
     vi z = {1,2,3,4,5,6};
        ^
#Verdict Execution timeMemoryGrader output
Fetching results...