P2630 图像变换 恶心的模拟题

题目描述

给定 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值