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

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

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐