欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  互联网

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

程序员文章站 2022-03-27 15:57:32
洛谷 P1205 [USACO1.2]方块转换 Transformations思路:模拟题,把前6种情况分别做处理旋转90度后,a[i][j]就转移到了c[j][n-i+1]处旋转180度后,a[i][j]转移到c[n-j+1][n-i+1]处旋转270度后,a[i][j]转移到c[n-j+1][i]处水平翻转后,a[i][j]转移到c[i][n-j+1]处第5种情况就是第4种情况和前3种情况的组合,先进行水平翻转,再进行判断。第6种直接进行判断前6种都不满足,则输出7代码如下:....

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

思路:

模拟题,把前6种情况分别做处理

  • 旋转90度后,a[i][j]就转移到了c[j][n-i+1]处
  • 旋转180度后,a[i][j]转移到c[n-j+1][n-i+1]处
  • 旋转270度后,a[i][j]转移到c[n-j+1][i]处
  • 水平翻转后,a[i][j]转移到c[i][n-j+1]处
  • 第5种情况就是第4种情况和前3种情况的组合,先进行水平翻转,再进行判断。
  • 第6种直接进行判断
  • 前6种都不满足,则输出7

代码如下:

/*
 * @Description: 
 * @Author: 多多
 * @Date: 2020-10-24 08:47:01
 * @LastEditTime: 2020-10-24 09:25:41
 * @LastEditors: 多多
 */
#include <bits/stdc++.h>
using namespace std;

char ch1[12][12], ch2[12][12];

bool func1(int num, char a[][12], char c[][12])
{
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            if (a[i][j] != c[j][num - i + 1])
            {
                return 0;
            }
        }
    }
    return 1;
}

bool func2(int num, char a[][12], char c[][12])
{
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            if (a[i][j] != c[num - i + 1][num - j + 1])
            {
                return 0;
            }
        }
    }
    return 1;
}

bool func3(int num, char a[][12], char c[][12])
{
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            if (a[i][j] != c[num - j + 1][i])
            {
                return 0;
            }
        }
    }
    return 1;
}

bool func4(int num, char a[][12], char c[][12])
{
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            if (a[i][j] != c[i][num - j + 1])
            {
                return 0;
            }
        }
    }
    return 1;
}

bool func5(int num, char a[][12], char c[][12])
{
    char b[12][12];
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            b[i][j] = a[i][num - j + 1];
        }
    }
    if (func1(num, b, c) || func2(num, b, c) || func3(num, b, c))
    {
        return 1;
    }
    return 0;
}

bool func6(int num, char a[][12], char c[][12])
{
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < num; j++)
        {
            if (a[i][j] != c[i][j])
            {
                return 0;
            }
        }
    }
    return 1;
}

int main()
{
    freopen("P1205.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cin >> ch1[i][j];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cin >> ch2[i][j];
        }
    }
    if (func1(n, ch1, ch2))
    {
        cout << 1 << endl;
        return 0;
    }
    else if (func2(n, ch1, ch2))
    {
        cout << 2 << endl;
        return 0;
    }
    else if (func3(n, ch1, ch2))
    {
        cout << 3 << endl;
        return 0;
    }
    else if (func4(n, ch1, ch2))
    {
        cout << 4 << endl;
        return 0;
    }
    else if (func5(n, ch1, ch2))
    {
        cout << 5 << endl;
        return 0;
    }
    else if (func6(n, ch1, ch2))
    {
        cout << 6 << endl;
        return 0;
    }
    else
    {
        cout << 7 << endl;
        return 0;
    }
}

本文地址:https://blog.csdn.net/weixin_39117125/article/details/109254610

相关标签: 洛谷 c++