向題解低頭,向大佬低頭(。﹏。)orz……模擬也不能亂模啊……要好好分析題意,簡化簡化再簡化orz敲黑板
六個面的魔方,能一步還原的情況一定是只有2個面是單色,其余四個面,每個面2種顏色,而且不會出現任意兩面的兩種顏色均相同的情況。
? ?? 如果每個面的顏色>2,肯定沒有辦法一步還原,這里每輸入一個面用set計數,size=1的話記錄一下單色面的面數f,size=2的話判斷一下是否存在兩個面的兩種顏色均相同的情況,size>2當然就肯定不能一步還原啦,直接NO;
? ?? 如果單色面的面數>2,也是不能一步還原的……emmmm條件有些亂……感覺……就……一點一點湊……
#include<iostream> #include<string.h> #include<set> using namespace std; int c[7][7]; int a; int main() {int f = 0;for (int i = 0; i < 6; i++){set<int>s;for (int j = 0; j < 4; j++){cin >> a;s.insert(a);}if (s.size() == 1)f++;else if (s.size() == 2){int n[2];int j = 0;for (auto it : s) //emmm不太會用set……直接c[*s.begin()][*s.end()]的時候編譯錯誤……有米有大佬給講一講哇n[j++] = it;c[n[0]][n[1]]++;if (c[n[0]][n[1]] > 1){cout << "NO" << endl;return 0;}}else{cout << "NO" << endl;return 0;}}if (f == 2)cout << "YES" << endl;else cout << "NO" << endl;return 0; }
?