vector<vector<vector<bool>>> input(3,vector<vector<bool>>(2,vector<bool>(12)));
天平兩端的關係,則在用一個一維陣列存好,以便後續使用
再建立一個bool ans[12]={0} 代表可能答案的候選點 ,邊讀字串時,減去'A'得到對應的index值設1
不知道測資左右兩側會不會有重複,建議可以讀取完後,再前處理,兩側皆為1的index轉乘0
再來採用布林邏輯,進行刪去法
輸入處理好後,天平有三種情況
even,這比較點單,代表兩側皆不是答案,先將各兩側取not,再分別與ans取and,排除不合理的答案
再來是up、down,這需要兩兩比較
兩次測量都是up或down,以 a、b表示兩次測量,表示偽幣不是在a、b的左側,就是在a、b的右側,因此先(a左 and b左 )or (a右 and b右),再跟ans取and,排除不合理的答案
一筆up,另一筆down,表示偽幣在a、b處理相對的兩側,因此先(a左 and b右 )or (a右 and b左),再跟ans取and,排除不合理的答案
為什麼兩次測量都是up或down,偽幣會同一側,這是因為,根據等量公理,兩側排除等重的後,最後剩下一偽幣、一真幣,如果不是同一側,勢必會有一大一小,不同都偏向同一側,同理可知一筆up,另一筆down。
找出偽幣後,再去up或down的資料看偽幣位於哪一側,就知道答案了。