UVa 512 Spreadsheet Tracking
2016-06-30 10:10
344 查看
针对一个表格的插入、删除行列,和交换两个cell的操作。
开始的一个对(r,c)表示datasheet的行和列数
第二行的数字表示要执行的操作的数目
后面跟着多个操作,包括EX,DC,DR,IC,IR
然后是一个整数,表示要查询操作的个数
多个cell的坐标
以(0,0)对完成输入
输出:首先表明这是第几个表;
输出:对于每一个查询,首先输出原来的cell的位置,然后输出当前的位置,如果被删除了,则输出GONE
输出:每两个表之间输出一个空行。
开始的一个对(r,c)表示datasheet的行和列数
第二行的数字表示要执行的操作的数目
后面跟着多个操作,包括EX,DC,DR,IC,IR
然后是一个整数,表示要查询操作的个数
多个cell的坐标
以(0,0)对完成输入
输出:首先表明这是第几个表;
输出:对于每一个查询,首先输出原来的cell的位置,然后输出当前的位置,如果被删除了,则输出GONE
输出:每两个表之间输出一个空行。
#include<iostream> #include<string> using namespace std; /* struct Ele { int rOld; int cOld; }; const int ArrSize = 100000; Ele** sheetArr; int rowNum, colNum; void DR(unsigned int r) { for (int i = r; i < rowNum; ++i) for (int j = 1; j <= colNum; ++j) sheetArr[i][j] = sheetArr[i + 1][j]; rowNum--; } void DC(unsigned int c) { for (int j = c; j < colNum; ++j) for (int i = 1; i <= rowNum; ++i) sheetArr[i][j] = sheetArr[i][j + 1]; colNum--; } void IC(unsigned int c) { for (int j = colNum; j >= c; --j) for (int i = 1; i <= rowNum; ++i) sheetArr[i][j + 1] = sheetArr[i][j]; for (int i = 1; i <= rowNum; ++i) sheetArr[i][c] = { 0,0 }; colNum++; } void IR(unsigned int r) { for (int i = rowNum; i >= r; --i) for (int j = 1; j <= colNum; ++j) sheetArr[i + 1][j] = sheetArr[i][j]; for (int j = 1; j <= colNum; ++j) sheetArr[r][j] = { 0,0 }; rowNum++; } void EX(unsigned int rPre, unsigned int cPre, unsigned int rNew, unsigned int cNew) { Ele temp; temp = sheetArr[rPre][cPre]; sheetArr[rPre][cPre] = sheetArr[rNew][cNew]; sheetArr[rNew][cNew] = temp; } void print() { for (int i = 1; i <= rowNum; ++i) { for (int j = 1; j <= colNum; ++j) cout << sheetArr[i][j].cOld << "," << sheetArr[i][j].rOld << " "; cout << endl; } } Ele find(int r, int c) { Ele temp = { 0,0 }; for (int i = 1; i <= rowNum; ++i) for (int j = 1; j <= colNum; ++j) if (sheetArr[i][j].rOld == r && sheetArr[i][j].cOld == c) { temp = { i, j }; return temp; } return temp; } void arrInit(int r,int c) { for (int i = 1; i <= r; ++i) for (int j = 1; j <= c; ++j) sheetArr[i][j] = { i,j }; } int main() { #ifndef UVa FILE *fp; freopen_s(&fp, "data.in.txt", "r", stdin); freopen_s(&fp, "data.out.txt", "w", stdout); #endif sheetArr = new Ele*[ArrSize]; for (int i = 0; i < ArrSize; ++i) sheetArr[i] = new Ele[ArrSize]; int cnt = 0;//sheet number count while (cin >> rowNum >> colNum) { if (rowNum == 0 || colNum == 0) break; arrInit(rowNum, colNum); cnt++; int operCnt; cin >> operCnt; for (int i = 0; i < operCnt; ++i) { string cmd; int rcNum; cin >> cmd; if (cmd == "DR") { cin >> rcNum; for (int i = 0; i < rcNum; ++i) { int rLoc; cin >> rLoc; DR(rLoc-i); } } if (cmd == "DC") { cin >> rcNum; for (int i = 0; i < rcNum; ++i) { int rLoc; cin >> rLoc; DC(rLoc-i); } } if (cmd == "IC") { cin >> rcNum; for (int i = 0; i < rcNum; ++i) { int rLoc; cin >> rLoc; IC(rLoc+i); } } if (cmd == "IR") { cin >> rcNum; for (int i = 0; i < rcNum; ++i) { int rLoc; cin >> rLoc; IR(rLoc+i); } } if (cmd == "EX") { int rPre, cPre, rNew, cNew; cin >> rPre >> cPre >> rNew >> cNew; EX(rPre, cPre, rNew, cNew); } }//read operation for int qryNum; cin >> qryNum; cout << "Spreadsheet #" << cnt << endl; for (; qryNum > 0; --qryNum){ int r, c; cin >> r >> c; Ele nowPos = find(r, c); if (nowPos.cOld == 0 || nowPos.rOld == 0) cout << "Cell data in (" << r << "," << c << ") GONE" << endl; else cout << "Cell data in (" << r << "," << c << ") moved to (" <<nowPos.rOld << "," << nowPos.cOld << ")" << endl; }//process query for cout << endl; }//read r,c while return 0; }
相关文章推荐
- WebApi:WebApi的Self Host模式
- 如何卸载ubuntu软件
- linux I2C结构体
- angular2 quickstart
- 判断Range 使字符串 本别显示不同颜色
- view.getX和view.getTranslationX区别
- Android仿qq下拉刷新及向左滑动列表----PullToRefresh, SwipeMenuListView开源项目整合
- Cocosd2d 45度地图遮挡问题
- java中for循环的优化
- 货郎担(旅行售货商)动态规划
- 网页http请求的整个过程
- c#中文转unicode
- python+selenium 安装配置
- 网站运行时间js代码和年月日js代码
- 玩具装箱(1D1D优化)[HNOI 2008][Codevs 1319]
- leetcode-java-96. Unique Binary Search Trees
- 通用对象池
- Block
- NSString 基本用法
- ABAP中Collect的用法