UVa 512 - Spreadsheet Tracking
来源:互联网 发布:淘宝服装行业的利润 编辑:程序博客网 时间:2024/06/05 15:38
有一个r行c列(1≤r,c≤50)的电子表格,行从上到下编号为1~r,列从左到右编号为1~c。如图4-2(a)所示,如果先删除第1、5行,然后删除第3, 6, 7, 9列,结果如图4-2(b)所示。
接下来在第2、3、5行前各插入一个空行,然后在第3列前插入一个空列,会得到如图4-3所示结果。
你的任务是模拟这样的n个操作。具体来说一共有5种操作:
1.EX r1 c1 r2 c2交换单元格(r1,c1),(r2,c2)。
2.<command> A x1 x2 … xA 插入或删除A行或列(DC-删除列,DR-删除行,IC-插入列,IR-插入行,1≤A≤10)。
在插入/删除指令后,各个x值不同,且顺序任意。接下来是q个查询,每个查询格式为“r c”,表示查询原始表格的单元格(r,c)。对于每个查询,输出操作执行完后该单元格的新位置。输入保证在任意时刻行列数均不超过50。
#include<stdio.h>#include<string.h>#define maxn 10000struct Command { char c[5]; int r1, c1, r2, c2; int a, x[20];} cmd[maxn];int r, c, n;int simulate(int* r0, int* c0){ for(int i = 0; i < n; i++) { if(cmd[i].c[0] == 'E') { if(cmd[i].r1 == *r0 && cmd[i].c1 == *c0) { *r0 = cmd[i].r2; *c0 = cmd[i].c2; }else if(cmd[i].r2 == *r0 && cmd[i].c2 == *c0) { *r0 = cmd[i].r1; *c0 = cmd[i].c1;} } else { int dr = 0, dc = 0; for(int j = 0; j < cmd[i].a; j++) { int x = cmd[i].x[j]; if(cmd[i].c[0] == 'I') { if(cmd[i].c[1] == 'R' && x <= *r0) dr++; if(cmd[i].c[1] == 'C' && x <= *c0) dc++; } else { if(cmd[i].c[1] == 'R' && x == *r0) return 0; if(cmd[i].c[1] == 'C' && x == *c0) return 0; if(cmd[i].c[1] == 'R' && x < *r0) dr--; if(cmd[i].c[1] == 'C' && x < *c0) dc--; } } *r0 += dr; *c0 += dc; } } return 1;}int main() { int r0, c0, q, kase = 0; while(scanf("%d%d%d", &r, &c, &n) == 3 && r) { for(int i = 0; i < n; i++) { scanf("%s", cmd[i].c); if(cmd[i].c[0] == 'E') { scanf("%d%d%d%d", &cmd[i].r1, &cmd[i].c1, &cmd[i].r2, &cmd[i].c2); } else { scanf("%d", &cmd[i].a); for(int j = 0; j < cmd[i].a; j++) scanf("%d", &cmd[i].x[j]); } } if(kase > 0) printf("\n"); printf("Spreadsheet #%d\n", ++kase); scanf("%d", &q); while(q--) { scanf("%d%d", &r0, &c0); printf("Cell data in (%d,%d) ", r0, c0); if(!simulate(&r0, &c0)) printf("GONE\n"); else printf("moved to (%d,%d)\n", r0, c0); } } return 0;}
0 0
- UVA - 512 Spreadsheet Tracking
- Uva - 512 - Spreadsheet Tracking
- UVA - 512 Spreadsheet Tracking
- UVA-512 Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- uva 512 Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- UVa 512 - Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- 【水题】UVA 512 Spreadsheet Tracking
- 例题4-5 uva 512 - Spreadsheet Tracking
- UVa 512 - Spreadsheet Tracking (模拟)
- 紫书章四 Spreadsheet Tracking UVA
- 512 - Spreadsheet Tracking
- 512 - Spreadsheet Tracking
- 512 - Spreadsheet Tracking
- 512 - Spreadsheet Tracking
- 北京天宇联科技有限责任公司—T语言的解读
- Android EditText 让编辑框只能输入汉字
- 中国人为什么获得不了诺贝尔奖
- 名词备忘
- iOS - Swift 如何使用Masonry和SnapKit
- UVa 512 - Spreadsheet Tracking
- 配置Spring WEB应用的方法
- LeetCode 16---3Sum Closest
- 2017年排名有望上升的语言
- (2050): 【NOIP2012普及组】摆花
- 练习
- android逆向日记-Dex文件格式详解
- 阿里云ftp安装
- java的异常