POJ 3106 Flip and Turn 模拟 分析
2014-01-10 00:27
309 查看
--------
--------
const int maxn=400; const int maxm=200000; int n,m; char a[maxn][maxn]; char b[maxn][maxn]; int stk[10]; int cnt; char s[maxm]; char cd[7][3]={"1","CX","V","BY","2","AZ","H"}; char sp[7][8]={"1","1H","1H1","1H1H","1H1H1","1H1H1H","H"}; void work(char cmd){ for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ if (cmd=='1') b[j][i]=a[i][j]; if (cmd=='H') b[n-i+1][j]=a[i][j]; } } if (cmd=='1') swap(n,m); for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ a[i][j]=b[i][j]; } } } void stkPush(char cmd){ for (int i=0;i<7;i++){ if (strchr(cd[i],cmd)!=NULL){ int len=strlen(sp[i]); for (int j=0;j<len;j++){ if (cnt>0&&stk[cnt-1]==sp[i][j]) cnt--; else stk[cnt++]=sp[i][j]; if (cnt>=8) cnt=0; } break; } } } int main(){ while (~scanf("%d%d",&n,&m)){ cnt=0; for (int i=1;i<=n;i++) scanf("%s",a[i]+1); scanf("%s",s); int len=strlen(s); for (int i=0;i<len;i++) stkPush(s[i]); for (int i=0;i<cnt;i++) work(stk[i]); printf("%d %d\n",n,m); for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ printf("%c",a[i][j]); } printf("\n"); } } return 0; }
--------
相关文章推荐
- POJ 3106 Flip and Turn 模拟 分析
- UVA 10635 Prince and Princess DP LIS
- UVA 10635 Prince and Princess DP LIS
- 视频小知道
- JAVA中使用JSON进行数据传递
- 动态添加列
- jquery mobile radio,checkbox button 样式设置
- Android - 如何将两个/多个应用放到一个进程中去?
- ActionBar
- 员工请假管理系统(MFC+ACCESS数据库+ODBC数据源)
- ubuntu12.04安装cuda
- PL/SQL的数据类型
- 交互设计:从详情页返回列表页,应该是回到顶端还是回到原地?
- 使用SQL语句清空数据库所有表的数据
- DLUT 1184: 电影院里的对话(线段树)
- Ubuntu12.04 安装环境总结
- 预测今年 php.js 会火
- 伟东山学习--1--内核makefile,启动过程.
- 重构
- oracle 使用临时表返回数据表