当前位置: 代码迷 >> 综合 >> Uva253 Cube Painting
  详细解决方案

Uva253 Cube Painting

热度:42   发布时间:2023-12-05 13:33:30.0

题面:

我的思路:用一个set来存放一个骰子的所有可能情况,通过固定(3,4)面所对应的骰子面来区分不同分支情况。在(3,4)面确定的时候上旋遍历即可。

代码:

#include<iostream>
#include<algorithm>
#include<set>
#include<string>
#pragma GCC optimistic(2)
using namespace std;
void change_right(string& s,int step)//用传引用的方法来避免不必要的复制
{char kase;for(int k=0;k<step;k++){kase=s[1];s[1]=s[2];s[2]=s[4];s[4]=s[3];s[3]=kase;}
}
void change_up(string& s,int step)
{char kase;for(int k=0;k<step;k++){kase=s[5];s[5]=s[4];s[4]=s[0];s[0]=s[1];s[1]=kase;}
}
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string s;while(cin>>s){string origin,test;origin=s.substr(0,6);//对原字符串切段test=s.substr(6,6);set<string> dict;for(int r=0;r<=1;r++){for(int i=0;i<4;i++){string temp=origin;change_up(temp,r);//区分是否将1,6面上旋加入遍历组中change_right(temp,i);//右旋骰子,与上旋配合以达到遍历所有面的情况。for(int j=0;j<4;j++){change_up(temp,j);//在(3,4)面确定的情况下遍历所有上旋情况dict.insert(temp);}}}if(dict.count(test))//在集合中查找是否存在test这种情况{cout<<"TRUE"<<endl;}else{cout<<"FALSE"<<endl;}}return 0;
}

 

  相关解决方案