Week10模拟 :魔方
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Week10模拟 :魔方
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                文章目錄
- 簽到題
- 題目描述
- 解題
- 代碼
 
- 轉魔方
- 題目描述
- 解題
- 代碼
 
簽到題
題目描述
解題
- 隊列
 相當于在一個隊列里,如果出現(xiàn)st刪除。當加入一個字符時,如果是T,且前一個使S,刪除掉。
代碼
#include<iostream> #include<string> #include<sstream> using namespace std; const int N=2e5; char stk[N]; string s; int p=0; int main(){char c;stk[0]='T';cin>>s;int i=0;while(s[i]!='\0'&&s[i]!='\n'){c=s[i++];if(p==0){stk[++p]=c;continue;}if(c=='T'&&stk[p]=='S'){p--;continue;}stk[++p]=c;}cout<<p; }轉魔方
題目描述
- **展開圖
 
解題
- 準備
 首先給每一面編號,以右上前角為觀察點,坐下后角為原點。從1到6編號,每一面面的四塊也是一這樣的方式從1到4編號。
- 變換
 每一次旋轉都需要更新魔方數(shù)組(存放每一面的每一塊顏色編號),所以定義一個變換方法,參數(shù)是需要變換的八個塊(按順序)。
- 判斷
 判斷上下兩面是否各自都相等(如果上面不相等,下面絕對也不相等)ht(),然后是左右lr(),前后fb()。
 另外定義fun(判斷所有面),init_()恢復到初始狀態(tài)。
- 旋轉
 嘗試旋轉,并判斷是否可以還原。
代碼
#include<iostream> using namespace std; int a[8][6],init[8][6];void chg(int &o1,int &o2,int &t1,int &t2,int &tr1,int &tr2,int &f1,int &f2)//變換 {int tt1,tt2;tt1=o1;tt2=o2;o1=t1;o2=t2;t1=tr1;t2=tr2;tr1=f1;tr2=f2;f1=tt1;f2=tt2; }void init_()//初始狀態(tài) {for(int i=1;i<=6;i++)for(int j=1;j<=4;j++)a[i][j]=init[i][j]; } bool fb()//前后 {for(int i=2;i<=4;i+=2)for(int j=2;j<=4;j++)if(a[i][1]!=a[i][j])return false;return true; } bool lr()//左右 {for(int i=5;i<=6;i++)for(int j=2;j<=4;j++)if(a[i][1]!=a[i][j])return false;return true; } bool ht()//頭底 {for(int i=1;i<=3;i+=2)for(int j=2;j<=4;j++)if(a[i][1]!=a[i][j])return false;return true; } bool fun(){return fb()&&lr()&&ht(); } bool whirling()//旋轉 {if(ht() && !fb() && !lr()){chg(a[2][1],a[2][2],a[6][3],a[6][1],a[4][4],a[4][3],a[5][2],a[5][4]);if(fun()) return true;init_();chg(a[2][1],a[2][2],a[5][2],a[5][4],a[4][4],a[4][3],a[6][3],a[6][1]);if(fun()) return true;return false;}else if(lr() && !fb() && !ht()){chg(a[2][2],a[2][4],a[1][2],a[1][4],a[4][2],a[4][4],a[3][2],a[3][4]);if(fun()) return true;init_();chg(a[2][2],a[2][4],a[3][2],a[3][4],a[4][2],a[4][4],a[1][2],a[1][4]);if(fun()) return true;return false;}else if(fb() && !lr() && !ht()){chg(a[6][1],a[6][2],a[1][1],a[1][2],a[5][1],a[5][2],a[3][4],a[3][3]);if(fun()) return true;init_();chg(a[6][1],a[6][2],a[3][4],a[3][3],a[5][1],a[5][2],a[1][1],a[1][2]);if(fun()) return true;return false;}return false; } int main(){int t;cin>>t;while(t--){for(int i=1;i<=6;i++){for(int j=1;j<=4;j++){cin>>a[i][j];init[i][j]=a[i][j];}} if(fun()){cout<<"YES"<<endl;} else{if(whirling()){cout<<"YES"<<endl;}else cout<<"NO"<<endl;} }return 0; }總結
以上是生活随笔為你收集整理的Week10模拟 :魔方的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Unity 2D精灵
- 下一篇: 软著申请60页的源代码文档在线生成工具
