plz help, thx~
Code: Select all
#include <cstdio>
#include <iostream>
#include <string>
#define BROWN 0
#define GREEN 1
#define CLEAR 2
#ifndef INT_MAX
#define INT_MAX 0xFFFFFFFFF
#endif
// UserID : 3931RL
using namespace std;
class Problem102{
private:
class RecycleBin{
public:
int glass[3];
int hold;
RecycleBin(){
set(0,0,0);
}
void set(int b, int g, int c){
glass[BROWN]=b; glass[GREEN]=g; glass[CLEAR]=c;
}
};
void parseInput();
RecycleBin *bin;
public:
void solve(){
parseInput();
}
~Problem102(){
delete [] bin;
}
};
void Problem102::parseInput(){
int order[6][3]={ {BROWN, CLEAR, GREEN},
{BROWN, GREEN, CLEAR},
{CLEAR, BROWN, GREEN},
{CLEAR, GREEN, BROWN},
{GREEN, BROWN, CLEAR},
{GREEN, CLEAR, BROWN} };
char orderName[3]={'B', 'G', 'C'};
int minOrder;
bin=new RecycleBin[3];
int minResult;
int count,i,j,k;
int bin0b,bin0g,bin0c,bin1b,bin1g,bin1c,bin2b,bin2g,bin2c;
while( scanf("%d %d %d %d %d %d %d %d %d", &bin0b, &bin0g, &bin0c, &bin1b, &bin1g, &bin1c, &bin2b, &bin2g, &bin2c )==9 ){
// set glasses to bins
bin[0].set(bin0b,bin0g,bin0c);
bin[1].set(bin1b,bin1g,bin1c);
bin[2].set(bin2b,bin2g,bin2c);
minResult=INT_MAX;
minOrder = -1;
for( i=0 ; i<6 ; i++ ){
bin[0].hold=order[i][0];
bin[1].hold=order[i][1];
bin[2].hold=order[i][2];
count = 0;
for( j=0 ; j < 3 ; j++ ){
for( k=0 ; k < 3 ; k++ ){
if( k != bin[j].hold ){
count += bin[j].glass[k];
}
}
}
if( count < minResult ){
minResult=count;
minOrder=i;
}
}
printf("%c%c%c %d\n", orderName[order[minOrder][0]], orderName[order[minOrder][1]], orderName[order[minOrder][2]], minResult);
}
}
int main(){
Problem102 clsP102=Problem102();
clsP102.solve();
return 0;
}