UVa512 - Spreadsheet Tracking
题意:给出一个表格的行数和列数,及一系列的插入行,删除行,插入列,删除列,单元格交换操作,然后给出系列的查询,问初始的单元格新的位置
思路:如果删除的行或者删除的列在查询的行或者列之前,则对应的行或者列减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相关推荐
- 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)
大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...
- 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)
本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...
- UVA - 512 Spreadsheet Tracking
Spreadsheet Tracking UVA - 512 题目传送门 紫书第二个思路十分巧妙,能用很少的代码解出此题. AC代码: #include <cstdio> #include ...
- UVA512 追踪电子表格中的单元格 Spreadsheet Tracking
题目描述 PDF 题意翻译 有一个r行c列(1≤r,c≤50)的电子表格,行从上到下编号为1~r,列从左到右编号为 1~c.如图(a)所示,如果先删除第1.5行,然后删除第3,6,7,9列,结果如图© ...
- Spreadsheet Tracking
原题及翻译 Data in spreadsheets are stored in cells, which are organized in rows ® and columns ©. 电子表格中的数 ...
- UVA 512 Spreadsheet Tracking
题目链接:https://vjudge.net/problem/UVA-512 题目翻译摘自<算法禁赛入门经典> 题目大意 有一个 r 行 c 列(1 ≤ r,c ≤ 50)的电子表格,行 ...
- ACM题解系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
题是书中的题,解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章例题 POJ1488 UVA272 UVALive5381 TEX Quote[输入输出 ...
- ICPC程序设计题解书籍系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
题是书中的题,部分解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章 数组和字符串(例题) POJ1488 UVA272 UVALive5381 TEX ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
最新文章
- peleenet v2不好
- 登录界面-安全密码设计
- spring cloud微服务间限流,使用jMeter性能测试高并发
- 配置树莓派3和局域网NTP服务器实现内网时间校准
- python从指定文件夹导入模块_Python实现的在特定目录下导入模块功能分析
- 判断类型是否继承_【Java学习 | Javase】继承与多态
- linux 串口 dma,STM32 USART串口DMA 接收和发送流程详解
- C++移动构造函数以及move语句简单介绍
- Pytorch——用50行代码搭建ResNet
- Linux系统下ActivityMQ的安装
- Datalogic得利捷携突破性无线充电技术推出三款最新产品
- Python爬虫初学(4)登陆武汉理工大学教务处并转到成绩管理
- html文件中top什么意思,margin-top在html中的意思是什么
- python基础-文本对齐(居中,左对齐,右对齐)
- Vue keep-alive组件缓存 基础用法
- Excel饼图中既显示百分比
- 如何运用Microsoft Office Project 2003来做项目计划
- 怎么查看网站在百度是否安全?提示网站有风险怎么办?
- 这些优质的教育类公众号您知道么,非常实用!
- Java基础之 Scanner 扫描器
热门文章
- js 数组,字符串,JSON,bind, Name
- Linux性能测试 ss命令
- python这个软件学会能做什么工作-工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...
- 怎么学python-如何高效学 Python?
- python开发安卓程序-如何使用python开发android应用
- 零基础自学python的建议-如何从零基础自学Python?
- python如何爬虫-如何使用python写爬虫程序
- python excel 自动化-python自动化测试报告(excel篇)
- php与jpython-Ruby on Rails VS PHP VS Python
- r语言和python-PythonR语言-python和r相遇