#54554: cpp解法 二維矩陣


rich040903@gmail.com (241C徐瑞利)


翻譯有誤 是2^31 不是231種
```cpp
/*想法*/
/*輸入拆解*/ //getline 切割
/*資料處理型態*/ //struct? 有不同桶 + 不同顏色的瓶子 //寫成二維矩陣比較好遍歷
/*怎麼決定哪個桶放什麼顏色的*/

 

#include<iostream>
#include<bits/stdc++.h>
#include <climits> // INT_MAX
using namespace std;
#define Max_Movetime INT_MAX
// struct bucket{
//     int brown;//
//     int green;//
//     int clear;//
// };
int main(){
    string s;
    // bucket a,b,c;
    int bucket[3][3];//"0=B""1=G""2=C"
    string set[6] = {"BCG","BGC","CBG","CGB","GBC","GCB"}; //Bruce Force
    while(getline(cin,s)){
        /*輸入拆解*/ //getline 切割
        stringstream ss(s);
        ss >> bucket[0][0] >> bucket[0][1] >> bucket[0][2] //同桶子
           >> bucket[1][0] >> bucket[1][1] >> bucket[1][2]
           >> bucket[2][0] >> bucket[2][1] >> bucket[2][2];
            //B             //G             //C
        int bs = bucket[0][0] + bucket[1][0] + bucket[2][0];//brown sum
        int gs = bucket[0][1] + bucket[1][1] + bucket[2][1];//green sum
        int cs = bucket[0][2] + bucket[1][2] + bucket[2][2];//clear sum  

 

        /*比較*/
        int smallest_set_index;
        int smallest_movetime = Max_Movetime;//232
        for(int k=0 ; k<6 ; k++){
            int movetime = 0;
            for(int i=0 ; i<3 ;i++){
                if(set[k][i]=='B'){
                    movetime += (bs - bucket[i][0]);
                }
                else if(set[k][i]=='G'){
                    movetime += (gs - bucket[i][1]);
                }
                else if(set[k][i]=='C'){
                    movetime += (cs - bucket[i][2]);
                }
            }
            if(movetime<smallest_movetime){
                smallest_movetime=movetime;
                smallest_set_index = k;
            }
        }
        if(smallest_movetime==-1){
            cout << "movetime error";
            return -1;
        }
        /*輸出*/
        cout << set[smallest_set_index] << " " << smallest_movetime << endl;
    }
    return 0;
}
```