洛谷 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