首页 > 其他分享 >洛谷 P1205 [USACO1.2] 方块转换 Transformations

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

时间:2022-11-30 14:48:10浏览次数:49  
标签:USACO1.2 11 洛谷 Transformations int 图案 正方形 转换 define

[USACO1.2] 方块转换 Transformations

题目描述

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

  • 转 90° :图案按顺时针转 90° 。

  • 转 180° :图案按顺时针转 180° 。

  • 转 270° :图案按顺时针转 270° 。

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

  • 组合:图案在水平方向翻转,然后再按照 \(1 \sim 3​\) 之间的一种再次转换。

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

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

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

只使用上述 \(7\) 个中的一个步骤来完成这次转换。

输入格式

第一行一个正整数 \(n\)。

然后 \(n\) 行,每行 \(n\) 个字符,全部为 @-,表示初始的正方形。

接下来 \(n\) 行,每行 \(n\) 个字符,全部为 @-,表示最终的正方形。

输出格式

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

样例 #1

样例输入 #1

3
@-@
---
@@-
@-@
@--
--@

样例输出 #1

1

提示

【数据范围】
对于 \(100\%\) 的数据,\(1\le n \le 10\)。

题目翻译来自 NOCOW。

USACO Training Section 1.2

若原图形为 a [ i ] [ j ]旋转后图形为 b[ i ][ j ]则将图形顺时针旋转九十度 b[ i ][ j ] = a[ j ][ n - i + 1 ]

将图形逆时针旋转九十度 b[ i ][ j ] = a[ n - j + 1 ] [i ]

将图形在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)b[ i ][ j ] = a[ i ][ n - j + 1 ]

#include <bits/stdc++.h>
// #define ONLINE_JUDGE
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define SZ(v) ((int)v.size())
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef double db;
using namespace std;

int _;
int n;
char a[11][11], b[11][11], c[11][11];

bool check(char a[11][11], char b[11][11], int n) {  //旋转90度
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) if(a[i][j] != b[i][j]) return false;
    }
    return true;
}

void print(char a[11][11]) {
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
}

void reverse_90(char a[11][11], char b[11][11]) {
    char d[11][11];
    for(int i = 1; i <= n; i++) 
        for(int j = 1; j <= n; j++) 
            d[i][j] = a[i][j];
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            a[i][j] = d[n-j+1][i];
        }
    }
}

bool f1(char a[11][11], char b[11][11]) {
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    return 0;
}

bool f2(char a[11][11], char b[11][11]) {
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    return 0;
}

bool f3(char a[11][11], char b[11][11]) {
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    return 0;
}

bool f4(char a[11][11], char b[11][11]) {
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            a[i][j] = c[i][j];
        }
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            a[i][j] = c[i][n-j+1];
        }
    }
    if(check(a, b, n)) return 1;
    return 0;
}

bool f5(char a[11][11], char b[11][11]) {
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    reverse_90(a, b);
    if(check(a, b, n)) return 1;
    return 0;
}

bool f6(char a[11][11], char b[11][11]) {
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            a[i][j] = c[i][j];
        }
    }
    if(check(a, b, n)) return 1;
    return 0;
}

void solve() {
    cin >> n;
    for(int i = 1; i <= n; i++) 
        for(int j = 1; j <= n; j++) {
            cin >> a[i][j];
            c[i][j] = a[i][j];
        }
    for(int i = 1; i <= n; i++) 
        for(int j = 1; j <= n; j++) 
            cin >> b[i][j];
    if(f1(a, b)) {
        cout << "1\n";
    }
    else if(f2(a, b)) {
        cout << "2\n";
    }
    else if(f3(a, b)) {
        cout << "3\n";
    }
    else if(f4(a, b)) {
        cout << "4\n";
    }
    else if(f5(a, b)) {
        cout << "5\n";
    }
    else if(f6(a, b)) {
        cout << "6\n";
    }
    else {
        cout << "7\n";
    }
}

int main() {
    FAST;       
    // cin >> _;
    // while(_--) {
        solve();
    // }
    return 0;
}

标签:USACO1.2,11,洛谷,Transformations,int,图案,正方形,转换,define
From: https://www.cnblogs.com/zhyyyyy115/p/luogu_p1205.html

相关文章

  • 洛谷-P5541 Sleepy Cow Herding S
    SleepyCowHerdingSSleepyCowSorting的升级版,从\(3\)头牛变成\(n\)的情况分类讨论+双指针先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位......
  • 洛谷P2014 [CTSC1997] 选课
    sloj P2006.「树上背包」选课题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总......
  • 洛谷P2015 二叉苹果树
    slojP10153.「一本通5.2例1」二叉苹果树P2015二叉苹果树题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有N个结点(叶子......
  • 洛谷 P4018 Roy&October之取石子
    洛谷P4018Roy&October之取石子题意:\(n\)个石头,每次取\(p^k\)个石子(\(p\)是质数,\(k\in\N\)),取完最后一个的人获胜,问谁有必胜策略。只能说,MO题真的猛!结论:\(n\bmod......
  • 洛谷P1090 Java
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的......
  • 洛谷P2141 [NOIP2014 普及组] 珠心算测验
    [NOIP2014普及组]珠心算测验题目描述珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而......
  • 洛谷P1614 爱与愁的心痛
    爱与愁的心痛题目背景(本道题目隐藏了两首歌名,找找看哪~~~)《爱与愁的故事第一弹·heartache》第一章。《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大......
  • 洛谷P1047 [NOIP2005 普及组] 校门外的树
    [NOIP2005普及组]校门外的树题目描述某校大门外长度为l的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置......
  • 洛谷P4956 [COCI2017-2018#6] Davor
    [COCI2017-2018#6]Davor题面翻译在征服南极之后,Davor开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。他将在2018年12月31日开始出发,在这之......
  • 洛谷P1085 [NOIP2004 普及组] 不高兴的津津
    [NOIP2004普及组]不高兴的津津题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去......