Submission #689799

#TimeUsernameProblemLanguageResultExecution timeMemory
689799mychecksedadScales (IOI15_scales)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h>
#include <scales.h>
using namespace std;

void init(int T){

}

void answer(int W[]);

int getMedian(int A, int B, int C);
int getHeaviest(int A, int B, int C);
int getLightest(int A, int B, int C);
int getNextLightest(int A, int B, int C, int D);

void verase(int x, vector<int> &v){
	for(int i = 0; i < v.size(); ++i){
		if(v[i] == x){
			v.erase(v.begin() + i);
			return;
		}
	}
}

void orderCoins() {
    int W[6];

    vector<int> a(3), b(3);

    a[0] = getLightest(1, 2, 3);
    a[2] = getHeaviest(1, 2, 3);
    a[1] = (a[0] != 1 && a[2] != 1 ? 1 : (a[0] != 2 && a[2] != 2 ? 2 : 3));

    b[0] = getLightest(4, 5, 6);
    b[2] = getHeaviest(4, 5, 6);
    b[1] = (b[0] != 4 && b[2] != 4 ? 4 : (b[0] != 6 && b[2] != 6 ? 6 : 5));

    int med = getMedian(a[2], b[2], a[1]);

    if(med == a[1]){
    	W[5] = a[2];
    	W[4] = a[1];
    	verase(a[2], a);
    	verase(a[1], a);
    }else if(med == a[2]){
    	W[5] = b[2];
    	W[4] = a[2];
    	verase(a[2], a);
    	verase(b[2], b);
    }else{
    	W[5] = a[2];
    	W[4] = b[2];
    	verase(a[2], a);
    	verase(b[2], b);
    }

    if(a.size() == b.size()){
    	int med = getMedian(a[1], b[1], a[0]);

	    if(med == a[0]){
	    	W[3] = a[1];
	    	W[2] = a[0];
	    	verase(a[1], a);
	    	verase(a[0], a);
	    }else if(med == a[1]){
	    	W[3] = b[1];
	    	W[2] = a[1];
	    	verase(a[1], a);
	    	verase(b[1], b);
	    }else{
	    	W[3] = a[1];
	    	W[2] = b[1];
	    	verase(a[1], a);
	    	verase(b[1], b);
	    }

	    if(a.size() == b.size()){
	    	int mn = getLightest(a[0], b[0], W[2]);
	    	W[0] = mn;
	    	W[1] = (mn == a[0] ? b[0] : a[0]);
	    }else{
	    	if(a.empty())
	    		W[0] = b[0], W[1] = b[1];
	    	else
	    		W[0] = a[0], W[1] = a[1];
	    }
    }else{ // means that a.size == 1
    	int pos = getNextLightest(b[0], b[1], b[2], a[0]);
    	if(pos == b[0]){
    		int mn = getLightest(a[0], b[0], W[5]);
				if(mn == a[0]){
					W[0] = a[0];
					W[1] = b[0];
					W[2] = b[1];
					W[3] = b[2];
				}else{
					W[0] = b[0];
					W[1] = b[1];
					W[2] = b[2];
					W[3] = a[0];
				}		
    	}else{
    		W[0] = b[0];
    		int x = 1;
    		for(int i = 1; i < 3; ++i, x++){
    			if(pos == b[i]){
    				W[x] = a[0];
    				W[x + 1] = b[i];
    				x++;
    			}else W[x] = b[i];
    		}
    	}
    }	

    answer(W);
}

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:5:15: warning: unused parameter 'T' [-Wunused-parameter]
    5 | void init(int T){
      |           ~~~~^
scales.cpp: In function 'void verase(int, std::vector<int>&)':
scales.cpp:17:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |  for(int i = 0; i < v.size(); ++i){
      |                 ~~^~~~~~~~~~
scales.cpp: In function 'void orderCoins()':
scales.cpp:58:10: warning: declaration of 'med' shadows a previous local [-Wshadow]
   58 |      int med = getMedian(a[1], b[1], a[0]);
      |          ^~~
scales.cpp:38:9: note: shadowed declaration is here
   38 |     int med = getMedian(a[2], b[2], a[1]);
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...