POJ 3106 Flip and Turn <卡时间题目〉
来源:互联网 发布:统计数据库表的记录数 编辑:程序博客网 时间:2024/05/16 08:44
传送门:http://poj.org/problem?id=3106
Description
Let us define a set of operations on a rectangular matrix of printable characters.
A matrix A with m rows (1-st index) and n columns (2-nd index) is given. The resulting matrix B is defined as follows.
- Transposition by the main diagonal (operation identifier is ‘
1
’): Bj,i = Ai,j - Transposition by the second diagonal (‘
2
’): Bn−j+1,m−i+1 = Ai,j - Horizontal flip (‘
H
’): Bm−i+1,j = Ai,j - Vertical flip (‘
V
’): Bi,n−j+1 = Ai,j - Rotation by 90 (‘
A
’), 180 (‘B
’), or 270 (‘C
’) degrees clockwise; 90 degrees case: Bj,m−i+1 = Ai,j - Rotation by 90 (‘
X
’), 180 (‘Y
’), or 270 (‘Z
’) degrees counterclockwise; 90 degrees case: Bn−j+1,i = Ai,j
You are given a sequence of no more than 100 000 operations from the set. Apply the operations to the given matrix and output the resulting matrix.
Input
At the first line of the input file there are two integer numbers — m and n (0 < m, n ≤ 300). Then there are m lines with n printable characters per line (we define a printable character as a symbol with ASCII code from 33 to 126 inclusive). There will be no additional symbols at these lines.
The next line contains the sequence operations to be performed, specified by their one-character identifiers. The operations should be performed from left to right.
Output
Two integer numbers, the number of rows and columns in the output matrix. Then the output matrix must follow, in the same format as the input one.
Sample Input
3 40000a0b0cdefA1
Sample Output
3 4cdefa0b00000
原来TLT 优化后91ms
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define maxn 1000003int a[maxn], q[maxn];inline int read(){ int res(0),sign(1); char c; while(1){ c = getchar(); if('0' <= c && c <= '9') { res = c - '0'; break; } else if(c == '-') { sign = -1; break; } } while(1){ c = getchar(); if('0' <= c && c <= '9') res = res*10 + c - '0'; else break; } return res * sign;}inline void put(int x){ if(x< 0){ putchar('-'); x = -x; } if(x == 0){ putchar('0'); return; } char s[20]; int bas = 0; for(;x;x/=10)s[bas++] = x%10+'0'; for(;bas--;)putchar(s[bas]); return;}#define MAXN 100005#define For(i,m,n) for(i=m;i<n;i++)#define MOD 1000000007int r[2][2]={1,2,3,4};void Swap(int *x, int *y){ int t; t=*x; *x=*y; *y=t;}void op1(){ Swap(&r[0][1],&r[1][0]);}void op2(){ Swap(&r[0][0],&r[1][1]);}void opH(){ Swap(&r[0][0],&r[1][0]); Swap(&r[0][1],&r[1][1]);}main(){ int i, j, m, n, flag, ti, tj, cnt=0; char ch, Map[330][330]; m=read(),n=read(); //getchar(); For(i,0,m) gets(Map[i]);//printf("%s\n",Map[i]); while(ch = getchar(),ch!='\n'){ //printf("%c\n",ch); if(ch=='1') op1(),cnt++; if(ch=='2') op2(),cnt++; if(ch=='H') opH(); if(ch=='V') op1(),op2(),opH(); if(ch=='A'||ch=='Z') op2(),opH(),cnt++; if(ch=='B'||ch=='Y') op1(),op2(); if(ch=='C'||ch=='X') op1(),opH(),cnt++; } if(cnt%2) Swap(&m,&n); if(r[0][0]==1&&r[0][1]==2&&r[1][0]==3) flag=1; if(r[0][0]==1&&r[0][1]==3&&r[1][0]==2) flag=2; if(r[0][0]==2&&r[0][1]==1&&r[1][0]==4) flag=3; if(r[0][0]==2&&r[0][1]==4&&r[1][0]==1) flag=4; if(r[0][0]==3&&r[0][1]==1&&r[1][0]==4) flag=5; if(r[0][0]==3&&r[0][1]==4&&r[1][0]==1) flag=6; if(r[0][0]==4&&r[0][1]==2&&r[1][0]==3) flag=7; if(r[0][0]==4&&r[0][1]==3&&r[1][0]==2) flag=8; //printf("%d %d\n",m,n); put(m),putchar(' '),put(n),putchar('\n'); For(i,0,m){ For(j,0,n){ if(flag==1) ti=i, tj=j; if(flag==2) ti=j, tj=i; if(flag==3) ti=i, tj=n-j-1; if(flag==4) ti=j, tj=m-i-1; if(flag==5) ti=n-j-1, tj=i; if(flag==6) ti=m-i-1, tj=j; if(flag==7) ti=n-j-1, tj=m-i-1; if(flag==8) ti=m-i-1, tj=n-j-1; putchar(Map[ti][tj]); } putchar('\n'); } return 0;}
- POJ 3106 Flip and Turn <卡时间题目〉
- POJ 3106 Flip and Turn
- 模拟 poj 3106 Flip and Turn
- POJ 3106Flip and Turn(模拟)
- POJ 3106 Flip and Turn 模拟 分析
- POJ 3106 Flip and Turn 笔记
- Poj 3106 Flip and Turn(模拟+优化)
- poj 1063 Flip and Shift
- POJ 1063 - Flip and Shift
- POJ 题目1753 Flip Game(DFS)
- ACM学习-POJ-1063-Flip and Shift
- ACM学习-POJ-1063-Flip and Shift
- 模拟+搜索poj 1063 Flip and Shift
- [zz]Flip and Shift -- POJ 1063 解题报告
- POJ 1063 Flip and Shift(找规律题)
- poj 1063 Flip and Shift 冒泡排序的扩展运用
- POJ 1063 Flip and Shift 已被翻译
- Flip and Shift(ZJU_1028)
- 数据存储在多张表,缓存维度简单设计
- LeetCode 111 Minimum Depth of Binary Tree (DFS)
- 白话卷积神经网络CNN
- webview 加载后,界面动画有白点
- 邮件发送方法及邮箱服务器及端口号总结
- POJ 3106 Flip and Turn <卡时间题目〉
- 在Linux服务器上搭建Git远程仓库并Push本地库
- 如何判断自己外网IP是否为真实公网IP,以及解决方案
- iOS区分各种设备
- PHP常用文件函数和目录函数整理
- 大数据技术的具体内容
- Google Play Services Location:更改位置设置
- Parser learn& mark
- Linux安装mongodb