【问题描述】

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

1:转90度:图案按顺时针转90度。

2:转180度:图案按顺时针转180度。

3:转270度:图案按顺时针转270度。

4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。

5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。

6:不改变:原图案不改变。

7:无效转换:无法用以上方法得到新图案。

如果有多种可用的转换方法,请选择序号最小的那个。

一个步骤就要搞定

【格式】

INPUT FORMAT:

file (transformations.in)

第一行: 单独的一个整数N。

第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。

第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。

OUTPUT FORMAT:

file (transformations.out)

单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。

【分析】

模拟,压位。

只提醒一个地方:如果有多种可用的转换方法,请选择序号最小的那个

 #include <cstdlib>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
const int maxn=;
const int INF=0x7fffffff;
using namespace std;
int n;
struct pic
{
int data[];
//比较运算符
bool operator ==(const pic &b)const
{
int i,flag=;
for (i=;i<=n;i++)
{
if (data[i]!=b.data[i])
{
flag=;
break;
}
}
return flag;
}
}from,to; void init(pic &t);//输入
void solve();
void turn(pic &t);//旋转90度
void fc(pic &t);//反射 int main()
{
//文件操作
freopen("transformations.in","r",stdin);
freopen("transformations.out","w",stdout); scanf("%d",&n);
init(from);
init(to);
solve();//解决
return ;
}
void init(pic &t)
{
int i,j;
memset(t.data,,sizeof(t.data));
for (i=;i<=n;i++)
{
char str[maxn];
scanf("%s",str);
for (j=;j<n;j++)
t.data[i]=(t.data[i]<<)+(str[j]=='-'?:);
}
return;
}
void solve()
{
pic temp=from;
//旋转三次
turn(temp);if (temp==to) {printf("");return;}
turn(temp);if (temp==to) {printf("");return;}
turn(temp);if (temp==to) {printf("");return;} temp=from;
fc(temp);if (temp==to) {printf("");return;}
turn(temp);if (temp==to) {printf("");return;}
turn(temp);if (temp==to) {printf("");return;}
turn(temp);if (temp==to) {printf("");return;}
if (from==to) {printf("6\n");return;}
printf("7\n");//无法获得
return;
}
void turn(pic &t)
{
int i,j;
pic c;
memset(c.data,,sizeof(c.data));
for (i=n;i>=;i--)
{
for (j=;j<=n;j++)
{
int temp;
temp=(((<<(j-))&t.data[i])==(<<(j-)));
c.data[n-j+]=(c.data[n-j+]<<)+temp;
}
}
t=c;
}
void fc(pic &t)
{
int i,j;
pic c;
memset(c.data,,sizeof(c.data));
for (i=;i<=n;i++)
{
//从左边一位一位取
for (j=;j<=n;j++)
{
int temp;
temp=(((<<(j-))&t.data[i])==(<<(j-)));
c.data[i]=(c.data[i]<<)+temp;
}
}
t=c;
}

【USACO 1.2.2】方块转换的更多相关文章

  1. Transformations 方块转换 USACO 模拟 数组 数学 耐心

    1006: 1.2.2 Transformations 方块转换 时间限制: 1 Sec  内存限制: 128 MB提交: 10  解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目 ...

  2. [USACO1.2.2]方块转换 Transformations

    P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...

  3. 洛谷 P1205 [USACO1.2]方块转换 Transformations

    P1205 [USACO1.2]方块转换 Transformations 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始 ...

  4. USACO 1.2.2 Transformations 方块转换

    Description 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度 ...

  5. USACO Training Section 1.2 [USACO1.2]方块转换 Transformations

    题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针 ...

  6. Transformations 方块转换

    题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化: 第一种:顺时针旋转90度: c[j][n-i+1]=a[i][j]; 第二种:旋转180度: c[n-i+1][n-j ...

  7. 洛谷 Transformations 方块转换

    Description 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度 ...

  8. 【USACO1.2_2】★Transformations 方块转换

    一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案依照下面列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度. ...

  9. luogu P1205 方块转换

    题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针 ...

随机推荐

  1. ZKW费用流修正

    #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc ...

  2. -_-#【CSS3】CSS3 gradient transition with background-position

    CSS3 gradient transition with background-position <!DOCTYPE html> <html> <head> &l ...

  3. super返回不过来

    class Fruit {     String color = "未确定颜色";     //定义一个方法,该方法返回调用该方法的实例     public Fruit getT ...

  4. 一键安装mysql5.6

    #!/bin/bash # @Name:install_mysql.sh # @Author:Eivllom # @Create -- # @Modify -- app_soft="/app ...

  5. CSS3中text-overflow支持以...代替超出文本

    CSS3中text-overflow支持以...代替超出文本. 1.div1:默认状态.超出文本默认显示在div外 2.div2:text-overflow:ellipsis; 使用text-over ...

  6. Maximum Subarray——LeetCode

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. Android Proguard

    Android Proguard 14 May 2015 语法 -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基 ...

  8. C++ sizeof

    class A{ int a; char c; char b; }; class B{ char c; int a; char b; }; int main(int argc, char* argv[ ...

  9. [转载]软件测试之Web测试经典总结

    转载自:软件测试之Web测试经典总结 基于Web的系统测试在基于Web的系统开发中,如果缺乏严格的过程,我们在开发.发布.实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大.而且, ...

  10. DTD与XSD的区别

    DTD=类型定义(Documnet Type Definition) XSD=XML结构定义 ( XML Schemas Definition ) DTD 就相当于 XML 中的“词汇”和“语法”,不 ...