洛谷 Transformations 方块转换
2024-10-18 01:07:39
Description
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度。 2:转180度:图案按顺时针转180度。 3:转270度:图案按顺时针转270度。 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。 5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。 6:不改变:原图案不改变。 7:无效转换:无法用以上方法得到新图案。 如果有多种可用的转换方法,请选择序号最小的那个。
Input
第一行: 单独的一个整数N。 第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。 第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
Output
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
Sample Input
3 @-@ --- @@- @-@ @-- --@
Sample Output
1 判断原有的正方体经过哪种变换后得到给定的正方体,数据量不大,第一思路是暴力,但是写起来太麻烦了。
分析,因为旋转的方式是固定的,所以说原正方体中的每一个坐标都可以用公式来表示出变换后的坐标,因此只需要遍历一遍正方体中所有的点即可。
点与点之间的联系,每个点变换后的位置已经确定,一次遍历。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<map>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0);
const double e=exp();
const int N = ; int a[][],b[][];
int check[];
int n; void judge(int m)
{
int i,p,j;
for(i=; i<n; i++)
{
for(j=; j<n; j++)
{
if(a[i][j]!=b[j][n--i])
check[m+]=;
if(a[i][j]!=b[n--i][n--j])
check[m+]=;
if(a[i][j]!=b[n--j][i])
check[m+]=;
}
}
}
int main()
{
int i,p,j;
scanf("%d",&n);
for(i=; i<n; i++)
for(j=; j<n; j++)
scanf(" %c",&a[i][j]); int flag=;
for(i=; i<n; i++)
for(j=; j<n; j++)
{
scanf(" %c",&b[i][j]);
if(a[i][j]!=b[i][j])
flag=;
}
memset(check,,sizeof(check));
judge(); for(i=; i<n; i++)
for(j=; j<=(n-)/; j++)
{
char c=a[i][j];
a[i][j]=a[i][n--j];
a[i][n--j]=c;
}
for(i=;i<n;i++)
for(j=;j<n;j++)
if(a[i][j]!=b[i][j])
check[]=; judge();
while()
{
for(i=;i<=;i++)
if(!check[i])
{
printf("%d\n",i);
break;
}
if(i<=)
break;
if(check[]==||check[]==||check[]==)
{
printf("5\n");
break;
}
if(flag==)
{
printf("6\n");
break;
} printf("7\n");
break;
} return ;
}
最新文章
- BIOS设置和CMOS设置的区别与联系
- System.Linq.Dynamic的使用
- requirejs加载css样式表
- Fraction to Recurring Decimal
- 【递归】斐波那契数列第n个数
- Nginx 配置详解
- 解决HierarchyViewer不能连接真机的问题
- mac 显示隐藏文件方法
- setTimeout 和 setInteval 的区别。
- Java数据库设计14个技巧
- Just Oj 2017C语言程序设计竞赛高级组D: 字符串最大表示(next数组)
- 深入学习IOZone【转】
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
- sdoi<;序列计数>;
- VueI18n的应用
- Asp.Net Mvc表单提交之List集合
- json包含单双引号问题解决方案
- Java集合--概述
- thinkphp---手机访问切换模板!
- 如果使用mybatis的逆向工程生成的po类及mapper,如果我们想要进行的对数据库的操作在mapper中没有对应的接口函数:比如生成的mapper接口中没有按照姓名及性别混合条件查询。我们的解决办法是:使用逆向工程生成的对应表的Example文件。