Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Dice IV"
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_D
・サイコロ IV
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ITP1_11_D : Dice IV
/* Aizu Online Judge in C++ #ITP1_11_D : Dice IV https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_D 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; struct Dice{ int s[6]; void roll(char c){ int i; if(c=='E'){ i=s[0]; s[0]=s[3]; s[3]=s[5]; s[5]=s[2]; s[2]=i; }else if(c=='W'){ i=s[0]; s[0]=s[2]; s[2]=s[5]; s[5]=s[3]; s[3]=i; }else if(c=='N'){ i=s[0]; s[0]=s[1]; s[1]=s[5]; s[5]=s[4]; s[4]=i; }else if(c=='S'){ i=s[0]; s[0]=s[4]; s[4]=s[5]; s[5]=s[1]; s[1]=i; }else{ i=s[1]; s[1]=s[2]; s[2]=s[4]; s[4]=s[3]; s[3]=i; } } int up(void){ return s[0]; } int left(void){ return s[3]; } int right(void){ return s[2]; } int front(void){ return s[1]; } }; bool same(Dice a,Dice b){ for(int i=0;i<6;i++){ if(a.s[i]!=b.s[i]){ return false; } } return true; } int main(void){ Dice d[100]; int n; cin>>n; for(int j=0;j<n;j++){ for(int i=0;i<6;i++){ cin>>d[j].s[i]; } } bool tf=true; for(int k=0;k<n-1;k++){ for(int l=k+1;l<n;l++){ bool judge=false; for(int i=0;i<4;i++){ d[l].roll('R'); for(int j=0;j<4;j++){ d[l].roll('N'); if(same(d[k],d[l])){ judge=true; } } } d[l].roll('E'); for(int j=0;j<4;j++){ d[l].roll('N'); if(same(d[k],d[l])){ judge=true; } } d[l].roll('W'); d[l].roll('W'); for(int j=0;j<4;j++){ d[l].roll('N'); if(same(d[k],d[l])){ judge=true; } } if(judge){ tf=false; } } } cout<<(tf ? "Yes" : "No")<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/