Introduction
编写一个程序,读取以与图片显示相同的方式构造的n个骰子,并确定它们是否全部不同。
Input
在第一行中,给出了骰子数n。在接下来的n行中,分配给骰子面的六个整数按照其相应标签的升序给出。
Output
如果给定的骰子全部不同,则打印“Yes”,否则打印“No”。
Constraints
- 2 ≤ n ≤ 100
- 0 ≤ 骰子上的数字 ≤ 100
Samples
Sample Input 1
3
1 2 3 4 5 6
6 2 4 3 5 1
6 5 4 3 2 1
Sample Output 1
No
Sample Input 2
3
1 2 3 4 5 6
6 5 4 3 2 1
5 4 3 2 1 6
Sample Output 2
Yes
Answer
# include<bits/stdc++.h>
using namespace std;
struct dice
{ int f[7],f0[7];
void r(int a,int b,int c,int d){
int t;
t = f[a];
f[a] = f[d];
f[d] = f[c];
f[c] = f[b];
f[b] = t;
}
void roll(char cmd){
switch (cmd){
case 'S': r(1,2,6,5); break;
case 'N': r(1,5,6,2); break;
case 'W': r(1,4,6,3); break;
case 'E': r(1,3,6,4); break;
case 'R': r(2,3,5,4); break;
}
}
void MvTop(int n){
switch (n){
case 2: roll('N'); break;
case 3: roll('E'); break;
case 4: roll('W'); break;
case 5: roll('S'); break;
case 6: roll('N'); roll('N'); break;
default: break;
}
}
void copy(){
for(int i=1;i<=6;i++)
f0[i] = f[i];
}
void back(){
for(int i=1;i<=6;i++)
f[i] = f0[i];
}
bool e(dice d){
for(int i=1;i<=6;i++)
if(f[i]!=d.f[i]) return 0;
return 1;
}
bool equal(dice d){
copy();
for(int i=1;i<=6;i++){
MvTop(i);
for(int j=1;j<=4;j++){
roll('R');
if(e(d)) return 1;
}
back();
}
return 0;
}
} d[101];
bool AllDiff(int a,int n){
if(a==n) return 1;
for(int i=a+1;i<=n;i++)
if( d[a].equal(d[i]) )
return 0;
return AllDiff(a+1,n);
}
int main(){
int n;
cin>>n;
for(int k=1;k<=n;k++)
for(int i=1;i<=6;i++)
cin>>d[k].f[i];
cout<<(AllDiff(1,n) ? "Yes\n":"No\n");
return 0;
}