算典04_例题_05_UVA-512
2017-03-08 22:15
316 查看
Spreadsheet Tracking
题意
给你一张表,有五种操作IR 插入行
IC 插入列
DR 删除行
DC 删除列
EX 交换两个单元格
给你一个(行号,列号), 求出经过一些操作后新的(行号,列号),如果已经删除了则输出GONE
题解
这题虽然有点小复杂,但是没有太大的难度,只要设计好结构,模拟好过程即可这里使用结构体将所有的操作记录下来,然后对每一个询问都执行一遍操作,更改相应的变化
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5 + 5; #define met(a, b) memset(a, b, sizeof(a)); struct node { char opt[5]; int n, a[20]; int x1, y1, x2, y2; }cmd[maxn]; int n, r, c, on, x, y; void solve(int x, int y) { printf("Cell data in (%d,%d) ", x, y); for(int i = 0; i < n; ++i) { int t = x, k = y; if(!strcmp(cmd[i].opt, "IR")) { for(int j = 0; j < cmd[i].n; ++j) { if(cmd[i].a[j] <= t) ++x; } } else if(!strcmp(cmd[i].opt, "IC")) { for(int j = 0; j < cmd[i].n; ++j) { if(cmd[i].a[j] <= k) ++y; } } else if(!strcmp(cmd[i].opt, "DR")) { for(int j = 0; j < cmd[i].n; ++j) { if(cmd[i].a[j] < t) --x; else if(cmd[i].a[j] == t) {x = 0; i = n; break;} } } else if(!strcmp(cmd[i].opt, "DC")) { for(int j = 0; j < cmd[i].n; ++j) { if(cmd[i].a[j] < k) --y; else if(cmd[i].a[j] == k) {y = 0; i = n; break;} } } else { //EX if(x == cmd[i].x1 && y == cmd[i].y1) x = cmd[i].x2, y = cmd[i].y2; else if(x == cmd[i].x2 && y == cmd[i].y2) x = cmd[i].x1, y = cmd[i].y1; } } if(x <= 0 /*|| x > r*/ || y <= 0 /*|| y > c*/) printf("GONE\n"); else printf("moved to (%d,%d)\n", x, y); } int main() { #ifdef _LOCAL freopen("in.txt", "r", stdin); #endif int kase = 0; bool line = 0; while(scanf("%d%d", &r, &c) == 2 && (r || c)) { scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%s", cmd[i].opt); if(!strcmp(cmd[i].opt, "EX")) scanf("%d%d%d%d", &cmd[i].x1, &cmd[i].y1, &cmd[i].x2, &cmd[i].y2); else {scanf("%d", &cmd[i].n); for(int j = 0; j < cmd[i].n; ++j) scanf("%d", &cmd[i].a[j]); } } if(line) printf("\n"); if(!line) line = 1; printf("Spreadsheet #%d\n", ++kase); scanf("%d", &on); while(on--) { scanf("%d%d", &x, &y); solve(x, y); } } return 0; }
相关文章推荐
- 算典05_例题_04_UVA-156
- 算典05_例题_06_UVA-540
- 算典04_例题_03_UVA-133
- 例题4-5 UVa512 Spreadsheet Tracking
- 算典04_习题_05_UVA-1590
- 算典05_例题_07_UVA-136
- 算典03_例题_04_Uva-340
- 算典05_例题_02_UVA-101
- 算典03_例题_05_Uva-1583
- 算典05_例题_03_UVA-10815
- 算典04_例题_01_UVA-1339
- 算典04_例题_06_UVA-12412
- 算典05_例题_08_UVA-400
- 算法竞赛入门经典第四章例题4-5 Spreadsheet Tracking UVA - 512
- 算典04_例题_02_UVA-489
- 算典05_例题_10_UVA-207
- 算典05_例题_11_UVA-814
- 例题4-5 uva 512 - Spreadsheet Tracking
- 算典04_例题_04_UVA-213
- 算典05_例题_05_UVA-12096