题意:给出一个表格的行数和列数,及一系列的插入行,删除行,插入列,删除列,单元格交换操作,然后给出系列的查询,问初始的单元格新的位置

思路:如果删除的行或者删除的列在查询的行或者列之前,则对应的行或者列减1;如果插入的行或者插入的列小于或者等于查询的行或者列,对应的行或者列加1

代码如下:

#include <iostream>
#include <fstream>
#include <string>using namespace std;const int MAX_ROW        = 100;
const int COMMAND_NUM   = 10;struct Cmd
{string cmd_name;int opers_num;int opers[COMMAND_NUM];int r1, c1, r2, c2;
};Cmd cmd[MAX_ROW];int r, c, n;void processInput(string &str, int i);
bool solve(int& x, int& y);int main()
{
#ifndef ONLINE_JUDGEifstream fin("F:\\OJ\\uva_in.txt");streambuf *back = cin.rdbuf(fin.rdbuf());
#endifint cas = 0;while (cin >> r >> c){if (0 == r && 0 == c) break;cin >> n;for (int i = 0; i < n; i++){string str;cin >> str;processInput(str, i);}if (cas != 0) cout << endl;cout << "Spreadsheet #" << ++cas << endl;int number;cin >> number;while (number-- > 0){int srcx, srcy, dstx, dsty;cin >> srcx >> srcy;dstx = srcx, dsty = srcy;if (solve(dstx, dsty)){cout << "Cell data in (" << srcx << "," << srcy << ") moved to (" << dstx << "," << dsty << ")" << endl;}else{cout << "Cell data in (" << srcx << "," << srcy << ") GONE" << endl;}}}#ifndef ONLINE_JUDGEcin.rdbuf(back);
#endifreturn 0;
}void processInput(string &str, int i)
{if (str != "EX"){cmd[i].cmd_name = str;cin >> cmd[i].opers_num;for (int j = 0; j < cmd[i].opers_num; j++){cin >> cmd[i].opers[j];}}else{cmd[i].cmd_name = str;cin >> cmd[i].r1 >> cmd[i].c1 >> cmd[i].r2 >> cmd[i].c2;}
}bool solve(int& x, int& y)
{for (int i = 0; i < n; i++){if (cmd[i].cmd_name == "DR"){int srcx = x, srcy = y;for (int j = 0; j < cmd[i].opers_num; j++){if (cmd[i].opers[j] < srcx) x--;else if (cmd[i].opers[j] == srcx) return false;}}else if (cmd[i].cmd_name == "IR"){int srcx = x, srcy = y;for (int j = 0; j < cmd[i].opers_num; j++){if (cmd[i].opers[j] <= srcx) x++;}}else if (cmd[i].cmd_name == "DC"){int srcx = x, srcy = y;for (int j = 0; j < cmd[i].opers_num; j++){if (cmd[i].opers[j] < srcy) y--;else if (cmd[i].opers[j] == srcy) return false;}}else if (cmd[i].cmd_name == "IC"){int srcx = x, srcy = y;for (int j = 0; j < cmd[i].opers_num; j++){if (cmd[i].opers[j] <= srcy) y++;}}else if (cmd[i].cmd_name == "EX"){if (cmd[i].r1 == x && cmd[i].c1 == y) { x = cmd[i].r2, y = cmd[i].c2; }else if (cmd[i].r2 == x && cmd[i].c2 == y) { x = cmd[i].r1, y = cmd[i].c1; }}}return true;
}

UVa512 - Spreadsheet Tracking相关推荐

  1. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)

    大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...

  2. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)

    本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...

  3. UVA - 512 ​​​​​​​Spreadsheet Tracking

    Spreadsheet Tracking UVA - 512 题目传送门 紫书第二个思路十分巧妙,能用很少的代码解出此题. AC代码: #include <cstdio> #include ...

  4. UVA512 追踪电子表格中的单元格 Spreadsheet Tracking

    题目描述 PDF 题意翻译 有一个r行c列(1≤r,c≤50)的电子表格,行从上到下编号为1~r,列从左到右编号为 1~c.如图(a)所示,如果先删除第1.5行,然后删除第3,6,7,9列,结果如图© ...

  5. Spreadsheet Tracking

    原题及翻译 Data in spreadsheets are stored in cells, which are organized in rows ® and columns ©. 电子表格中的数 ...

  6. UVA 512 Spreadsheet Tracking

    题目链接:https://vjudge.net/problem/UVA-512 题目翻译摘自<算法禁赛入门经典> 题目大意 有一个 r 行 c 列(1 ≤ r,c ≤ 50)的电子表格,行 ...

  7. ACM题解系列之一:刘汝佳:《算法竞赛入门经典》(第2版)

    题是书中的题,解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章例题 POJ1488 UVA272 UVALive5381 TEX Quote[输入输出 ...

  8. ICPC程序设计题解书籍系列之一:刘汝佳:《算法竞赛入门经典》(第2版)

    题是书中的题,部分解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章 数组和字符串(例题) POJ1488 UVA272 UVALive5381 TEX ...

  9. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

最新文章

  1. peleenet v2不好
  2. 登录界面-安全密码设计
  3. spring cloud微服务间限流,使用jMeter性能测试高并发
  4. 配置树莓派3和局域网NTP服务器实现内网时间校准
  5. python从指定文件夹导入模块_Python实现的在特定目录下导入模块功能分析
  6. 判断类型是否继承_【Java学习 | Javase】继承与多态
  7. linux 串口 dma,STM32 USART串口DMA 接收和发送流程详解
  8. C++移动构造函数以及move语句简单介绍
  9. Pytorch——用50行代码搭建ResNet
  10. Linux系统下ActivityMQ的安装
  11. Datalogic得利捷携突破性无线充电技术推出三款最新产品
  12. Python爬虫初学(4)登陆武汉理工大学教务处并转到成绩管理
  13. html文件中top什么意思,margin-top在html中的意思是什么
  14. python基础-文本对齐(居中,左对齐,右对齐)
  15. Vue keep-alive组件缓存 基础用法
  16. Excel饼图中既显示百分比
  17. 如何运用Microsoft Office Project 2003来做项目计划
  18. 怎么查看网站在百度是否安全?提示网站有风险怎么办?
  19. 这些优质的教育类公众号您知道么,非常实用!
  20. Java基础之 Scanner 扫描器

热门文章

  1. js 数组,字符串,JSON,bind, Name
  2. Linux性能测试 ss命令
  3. python这个软件学会能做什么工作-工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...
  4. 怎么学python-如何高效学 Python?
  5. python开发安卓程序-如何使用python开发android应用
  6. 零基础自学python的建议-如何从零基础自学Python?
  7. python如何爬虫-如何使用python写爬虫程序
  8. python excel 自动化-python自动化测试报告(excel篇)
  9. php与jpython-Ruby on Rails VS PHP VS Python
  10. r语言和python-PythonR语言-python和r相遇