Cube painting UVA - 253
要仔細仔細仔細看題,不然會繞到好遠,理清思路的話沒什么難度,應該可以有好多種方法。
對比兩個給出的骰子,比較他們是不是同一個(有相同方式的上色)。輸入輸出很友好,沒有卡人的地方。
注意要按給定的方式進行上色,題目已經默認給出了一個正方體對六個面的編號(這個編號肯定對應是當前狀態的)
也就是說千萬要注意,如果你認為1,6面不動的話,可以將rbgggr中的2~5位做順延變成 gbgg然后ggbg gggb的話那就錯了!
按照標號的方式 假如以1為軸向右旋轉,則新的標號順序1*~6*會變為135246這樣 也就是bggg變為了ggbg。
?
思路是固定第二個骰子,用第一個骰子的三個對面來匹配骰子二的1-6這一對面,若成功,則對于剩下四個面來與骰子二做判定。
其實只要時固定了一個面作為頂,那么新的標號順序就能通過初始順序旋轉求出來。一共六種,分別對應每個面當頂面。自己想一下就能想出來。
然后對于中間四個面的旋轉匹配也有跡可循。同樣是按照規律 共有四種狀態依次循環(廢話, 五次就轉一圈回來了)。
接下來只要全部枚舉出最多4*6種狀態就可以判斷這兩個骰子是否相等了,上代碼。
#include<iostream> #include<string> #define rep(i,n,t) for(int i=(n);i<(t);i++) using namespace std; int main() {string S1, S2;int dir[6][6] = { { 0,1,2,3,4,5 },{ 1,5,2,3,0,4 },{ 2,1,5,0,4,3 },{ 3,1,0,5,4,2 },{ 4,0,2,3,5,1 },{ 5,4,2,3,1,0 } };int bod[4][4] = { { 0,1,2,3 },{ 2,0,3,1 },{ 3,2,1,0 },{ 1,3,0,2 } };int yu[] = { 5,4,3,2,1,0 };while (cin >> S1){bool flag = false;//得到S1,S2S2 = S1.substr(6, 6);S1.erase(6); // rep(i, 0, 6){if (S2[0] == S1[i] && S2[5] == S1[yu[i]]) {string head, body, tail;head = S1[dir[i][0]];rep(j, 1, 5) body += S1[dir[i][j]];tail = S1[dir[i][5]];rep(j, 0, 4) {string temp;rep(k, 0, 4) temp+= body[bod[j][k]];if (head + temp + tail == S2) flag = true;}}}if (flag) cout << "TRUE" << endl;else cout << "FALSE" << endl;//條件初始化 S1.clear(); S2.clear();}return 0; }要注意,這個題還有另一種解法,就是對比3對 像對面,若骰子一二的三對像對面都相等,則兩個骰子全等。
這個方法存在漏洞,但是也通過了ac,提醒了我們程序要魯棒性強,不然發生這種意外情況時根本考慮不到。意識不到自己的算法竟然有錯,會在錯誤的路上越走越遠。
因為有三種顏色,ggbrrbbgbrrg用上述解法會返回true,but should be false instead of true。
附別人寫的解法二代碼,很簡潔
#include <cstdio> #include <cstring>char str[15]; int vis[3]; /*每兩個對面形成一組顏色對, 每個正方體有三個顏色對,匹配下三個顏色對是否相同。(用vis標記檢查順序)*/int main() {while(scanf("%s", str) != EOF){int cnt = 0;memset(vis, 0, sizeof(vis));for(int i = 0; i < 3; i++){for(int j = 0; j < 3; j++){if((str[i] == str[6+j] && str[5-i] == str[11-j]) || (str[i] == str[11-j] && str[5-i] == str[6+j]) && !vis[j]){vis[j] = 1;cnt++;break;}}}if(cnt == 3) printf("TRUE\n");else printf("FALSE\n");} }?
轉載于:https://www.cnblogs.com/worldcreator-zh/p/10562187.html
總結
以上是生活随笔為你收集整理的Cube painting UVA - 253的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Mysql 层级、执行顺序、执行计划分析
- 下一篇: 结果填空:最强团队
