제출 #831596

#제출 시각아이디문제언어결과실행 시간메모리
831596waldi저울 (IOI15_scales)C++17
71.43 / 100
1 ms304 KiB
#include<bits/stdc++.h> #ifndef LOCAL #include "scales.h" #endif #define FOR(i,p,k) for(int i=(p);i<=(k);++i) #define REP(i,n) FOR(i,0,(n)-1) using namespace std; #ifdef LOCAL vector<int> perm; int getLightest(int a, int b, int c){ if(perm[a] < min(perm[b], perm[c])) return a; if(perm[b] < min(perm[a], perm[c])) return b; return c; } int getHeaviest(int a, int b, int c){ if(perm[a] > max(perm[b], perm[c])) return a; if(perm[b] > max(perm[a], perm[c])) return b; return c; } int getMedian(int a, int b, int c){ int x = getLightest(a, b, c); int y = getHeaviest(a, b, c); if(a!=x && a!=y) return a; if(b!=x && b!=y) return b; return c; } int getNextLightest(int a, int b, int c, int d){ vector<int> wieksze; if(perm[a] > perm[d]) wieksze.emplace_back(a); if(perm[b] > perm[d]) wieksze.emplace_back(b); if(perm[c] > perm[d]) wieksze.emplace_back(c); if(wieksze.size() == 1) return wieksze[0]; if(wieksze.size() == 2) return perm[wieksze[0]] < perm[wieksze[1]] ? wieksze[0] : wieksze[1]; return getLightest(a, b, c); } void answer(int wyn[]){ REP(i, 6-1) if(perm[wyn[i]] > perm[wyn[i+1]]){ FOR(x, 1, 6) printf("%d ", perm[x]); printf("\n"); REP(x, 6) printf("%d ", wyn[x]); printf("\ndupa\n"); exit(1); } } #endif void init(int t){ } vector<int> posortuj4(vector<int> vec){ int med = getMedian(vec[0], vec[1], vec[2]); if(med == vec[0]) swap(vec[0], vec[1]); if(med == vec[2]) swap(vec[2], vec[1]); // vec = {?, 2=med, ?, ?} int maks = getHeaviest(vec[0], vec[2], vec[3]); if(maks == vec[3]){ int mini = getLightest(vec[0], vec[1], vec[2]); if(mini == vec[2]) swap(vec[0], vec[2]); return vec; } if(maks == vec[0]) swap(vec[0], vec[2]); // vec = {1, 2=med, 3, ?} int t = getNextLightest(vec[0], vec[1], vec[2], vec[3]); swap(vec[2], vec[3]); if(t == vec[3]) return vec; swap(vec[1], vec[2]); if(t == vec[2]) return vec; swap(vec[0], vec[1]); return vec; } void orderCoins(){ vector<int> male = {1, 2, 3}; swap(male[0], male[getLightest(1, 2, 3)-1]); // male = {1, ?, ?} vector<int> duze = {4, 5, 6}; swap(duze[2], duze[getHeaviest(4, 5, 6)-4]); // duze = {?, ?, 3} int mini = getLightest(male[0], duze[0], duze[1]);// minimum wszystkiego int maks = getHeaviest(male[1], male[2], duze[2]);// maksimum wszystkiego vector<int> vec; FOR(i, 1, 6) if(i != mini && i != maks) vec.emplace_back(i); // vec - wszystko bez minimum i maksimum vec = posortuj4(vec); int wyn[] = {mini, vec[0], vec[1], vec[2], vec[3], maks}; answer(wyn); } #ifdef LOCAL int main(){ perm = {69, 1, 2, 3, 4, 5, 6}; do{ orderCoins(); } while(next_permutation(perm.begin()+1, perm.end())); } #endif

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

scales.cpp: In function 'void init(int)':
scales.cpp:48:15: warning: unused parameter 't' [-Wunused-parameter]
   48 | void init(int t){
      |           ~~~~^
#Verdict Execution timeMemoryGrader output
Fetching results...