题目描述
给定 33 行 33 列的图像各像素点灰度值,给定最终图像,求最短、字典序最小的操作序列。
其中,可能的操作及对应字符有如下四种:
A
:顺时针旋转 9090 度;
B
:逆时针旋转 9090 度;
C
:左右翻转;
D
:上下翻转。
输入格式
一个矩阵,表示初始的图像。
一个矩阵,表示最终的图像。
输出格式
最短、字典序最小的操作序列,保证长度不超过 10^8108,不保证有解。
若长度不超过 10^8108 无解则输出 Poland cannot into space!!!
。
输入输出样例
输入 #1复制
3 4 5 6 7 8 1 2 3 1 2 3 6 7 8 3 4 5
输出 #1复制
D
说明/提示
字符串长度不超过 10^8108。
要考虑顺逆时针后的左右变化
#include<bits/stdc++.h>
#define rep(a,b,c ) for(int a = b;a<=c;a++)
#define per(a,b,c) for(int a=b;a>=c;a--)
const int N = 10;
int a[N][N];
int b[N][N];
using namespace std;
int main(){
int flag = 0;
rep(i,1,3)
{
rep(j,1,3)
cin>>a[i][j];
}
rep(i,1,3)
{
rep(j,1,3)
cin>>b[i][j];
}
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j] != b[j][4-i])
{
flag = 1;
break;
}
}
}if(!flag)
{
cout<<'A'<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[4-i][4-j])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<"AA"<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[4-j][i])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<'B'<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[i][4-j])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<'C'<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[4-i][j])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<'D'<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[i][j])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<"AB"<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[4-j][4-i])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<"AD"<<endl;
return 0;
}
else flag = 0;
rep(i,1,3)
{
rep(j,1,3)
{
if(a[i][j]!=b[j][i])
{
flag = 1;
break;
}
}
}
if(!flag)
{
cout<<"AC"<<endl;
return 0;
}
else flag = 0;
if(!flag)
cout<<"Poland cannot into space!!!"<<endl;
return 0;
}