【USACO】Transformations
A square pattern of size N x N (1 <= N <= 10) black and white square tiles is transformed into another square pattern. Write a program that will recognize the minimum transformation that has been applied to the original pattern given the following list of possible transformations:
- #1: 90 Degree Rotation: The pattern was rotated clockwise 90 degrees.
- #2: 180 Degree Rotation: The pattern was rotated clockwise 180 degrees.
- #3: 270 Degree Rotation: The pattern was rotated clockwise 270 degrees.
- #4: Reflection: The pattern was reflected horizontally (turned into a mirror image of itself by reflecting around a vertical line in the middle of the image).
- #5: Combination: The pattern was reflected horizontally and then subjected to one of the rotations (#1-#3).
- #6: No Change: The original pattern was not changed.
- #7: Invalid Transformation: The new pattern was not obtained by any of the above methods.
In the case that more than one transform could have been used, choose the one with the minimum number above.
PROGRAM NAME: transform
INPUT FORMAT
Line 1: | A single integer, N |
Line 2..N+1: | N lines of N characters (each either `@' or `-'); this is the square before transformation |
Line N+2..2*N+1: | N lines of N characters (each either `@' or `-'); this is the square after transformation |
SAMPLE INPUT (file transform.in)
- 3
- @-@
- ---
- @@-
- @-@
- @--
- --@
OUTPUT FORMAT
A single line containing the the number from 1 through 7 (described above) that categorizes the transformation required to change from the `before' representation to the `after' representation.
SAMPLE OUTPUT (file transform.out)
- 1
- 一A的题,好happy。
不难,就是很麻烦。我是把前四个操作写成四个函数。其中旋转90度作为基本的函数,旋转180和旋转270都是由两次和三次旋转90度得到。
主要的问题就是int**和int a[][11]这两种传递参数时候遇到的麻烦,不知道怎么把两者统一起来,所以每次都要先把int**复制到一个数组里面,再作为参数传递给下一个函数,下午去找找资料吧。
- /*ID:Moment1991
- PROG:transform
- LANG:C++
- Compiling...
- Compile: OK
- Executing...
- Test 1: TEST OK [0.000 secs, 3496 KB]
- Test 2: TEST OK [0.003 secs, 3496 KB]
- Test 3: TEST OK [0.008 secs, 3496 KB]
- Test 4: TEST OK [0.008 secs, 3496 KB]
- Test 5: TEST OK [0.005 secs, 3496 KB]
- Test 6: TEST OK [0.003 secs, 3496 KB]
- Test 7: TEST OK [0.005 secs, 3496 KB]
- Test 8: TEST OK [0.005 secs, 3496 KB]
- All tests OK.
- */
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
- using namespace std;
- //旋转90度的操作
- int **transiformation_one(int before[][],int n){
- int **tran = new int*[];
- for(int i = ;i < ;i++){
- tran[i] = new int[];
- }
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j ++){
- tran[j][n-i-] = before[i][j];
- }
- return tran;
- }
- //旋转180由两次旋转90度得到
- int **transiformation_two(int before[][],int n){
- int **tran_1 = transiformation_one(before,n);
- int temp[][];
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j ++)
- temp[i][j] = tran_1[i][j];
- int **tran_2 = transiformation_one(temp,n);
- return tran_2;
- }
- //旋转270由三次旋转90度得到
- int **transiformation_three(int before[][],int n){
- int **tran_1 = transiformation_one(before,n);
- int temp[][];
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j ++)
- temp[i][j] = tran_1[i][j];
- int **tran_2 = transiformation_one(temp,n);
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j ++)
- temp[i][j] = tran_2[i][j];
- int **tran_3 = transiformation_one(temp,n);
- return tran_3;
- }
- //沿竖直方向翻转
- int **transiformation_four(int before[][],int n){
- int **tran = new int*[];
- for(int i = ;i < ;i++){
- tran[i] = new int[];
- }
- for(int j = ;j <= n/;j++){
- for(int i = ;i < n;i ++){
- tran[i][n-j-] = before[i][j];
- tran[i][j] = before[i][n-j-];
- }
- }
- return tran;
- }
- //判断两个矩阵是否相等
- bool is_equal(int **tran,int after[][],int n){
- for(int i = ;i < n;i ++)
- for(int j = ;j < n;j ++)
- if(tran[i][j] != after[i][j]){
- return false;
- }
- return true;
- }
- //没办法统一int**和inta[][11],只好写两个判断相等函数
- bool another_equal(int tran[][],int after[][],int n){
- for(int i = ;i < n;i ++)
- for(int j = ;j < n;j ++)
- if(tran[i][j] != after[i][j])
- return false;
- return true;
- }
- int main(){
- ifstream cin("transform.in");
- ofstream cout("transform.out");
- int n;
- char a;
- int before[][];
- int after[][];
- cin >> n;
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j++){
- cin >> a;
- if(a == '@')
- before[i][j] = ;
- else
- before[i][j] = ;
- }
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j++)
- {
- cin >> a;
- if(a == '@')
- after[i][j] = ;
- else
- after[i][j] = ;
- }
- int **tran = transiformation_one(before,n);
- if(is_equal(tran,after,n))
- {
- cout <<<<endl;
- free(tran);
- return ;
- }
- tran = transiformation_two(before,n);
- if(is_equal(tran,after,n))
- {
- cout <<<<endl;
- free(tran);
- return ;
- }
- tran = transiformation_three(before,n);
- if(is_equal(tran,after,n))
- {
- cout <<<<endl;
- free(tran);
- return ;
- }
- tran = transiformation_four(before,n);
- if(is_equal(tran,after,n))
- {
- cout <<<<endl;
- free(tran);
- return ;
- }
- //组合操作,调用多个函数实现
- tran = transiformation_four(before,n);
- int temp[][];
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j ++)
- temp[i][j] = tran[i][j];
- int **tran_2 = transiformation_one(temp,n);
- if(is_equal(tran_2,after,n))
- {
- cout <<<<endl;
- free(tran);
- free(tran_2);
- return ;
- }
- else{
- tran_2 = transiformation_two(temp,n);
- if(is_equal(tran_2,after,n))
- {
- cout <<<<endl;
- free(tran);
- free(tran_2);
- return ;
- }
- }
- tran_2 = transiformation_three(temp,n);
- if(is_equal(tran_2,after,n))
- {
- cout <<<<endl;
- free(tran);
- free(tran_2);
- return ;
- }
- if(another_equal(before,after,n))
- {
- cout << <<endl;
- return ;
- }
- cout <<<<endl;
- return ;
- }
【USACO】Transformations的更多相关文章
- 【USACO】Transformations(模拟)
Transformations A square pattern of size N x N (1 <= N <= 10) black and white square tiles is ...
- POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...
- 1642: 【USACO】Payback(还债)
1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...
- 1519: 【USACO】超级书架
1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...
- Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
[USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...
- 【CPLUSOJ】【USACO】【差分约束】排队(layout)
[题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...
- 【USACO】Dining
[题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...
- 【USACO】Optimal Milking
题目链接 : [POJ]点击打开链接 [caioj]点击打开链接 算法 : 1:跑一遍弗洛伊德,求出点与点之间的最短路径 2:二分答案,二分”最大值最小“ 3.1:建边,将 ...
- 【USACO】 Balanced Photo
[题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...
随机推荐
- python 解析web接口的json数据
实例1-使用urllib2 #utf-8 import urllib2 import json url="http://xxx.com" #获取json格式的字符串 page=ur ...
- HDU 5695 Gym Class 拓扑排序
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5695 题解: 求出字典序最大的拓扑序.然后把求好的数列翻转过来就是满足条件的数列,然后模拟求一下va ...
- 【BZOJ】【3439】Kpm的MC密码
Trie树/可持久化线段树 神题啊……搞了我一下午= =(其实第233个提交也是我的) 我一开始的思路:这个找kpm串的过程,其实就跟在AC自动机上沿fail倒着往下走是差不多的(看当前是哪些点的后缀 ...
- org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Server returned error code = 404 for URI.. Check server logs for details
严重: Servlet.service() for servlet jsp threw exceptionorg.codehaus.xfire.XFireRuntimeException: Could ...
- 学习NAnt Build .CS+Solution+MSBuild+SVN+NUnit+NUnitReport
NAnt help:http://nant.sourceforge.net/release/latest/help/tasks/NAntContrib help:http://nantcontrib. ...
- WSDL
WSDL 彻底理解webservice SOAP WSDL WSDL 详解 http://www.cnblogs.com/hujian/p/3494064.html http://www.cnblog ...
- oracle OVER(PARTITION BY) 函数
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...
- Sqli-labs less 49
Less-49 本关与47关基本类似,区别在于没有错误回显,所以我们可以通过延时注入和导入文件进行注入. 利用延时注入 http://127.0.0.1/sqli-labs/Less-49/?sort ...
- POC
大概就是原型验证的意思 验证概念 编辑 概念验证(Proof of concept,简称POC)是对某些想法的一个不完整的实现,以证明其可行性,示范其原理,其目的是为了验证一些概念或理论.在计算机安全 ...
- 解决JS文件页面加载时的阻塞
关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法.本文章就详细介绍XHR注入. 概述:JS分拆的方法 1.XHR注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化 ...