UVA 215 Spreadsheet Calculator (模拟)
模拟题。每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复。
这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写。注意细节,注意格式。
- /*********************************************************
- * --------------Tyrannosaurus--------- *
- * author AbyssalFish *
- **********************************************************/
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int R = , C = , LEN = ;
- struct Node
- {
- int n;
- string s;
- bool tp; //1 num 0 expr
- Node(){ s.reserve(LEN); }
- }nd[R][C];
- int Err[R][C], kas_clk;
- void readNd(int x,int y)
- {
- Node &u = nd[x][y];
- getline(cin, u.s);
- u.tp = !isalpha(u.s[]);// - ,1, A
- if(u.tp) {
- stringstream ssin(u.s);
- ssin>>u.n;
- }
- }
- const int ErrorCode = <<;
- typedef pair<int,int> pii;
- vector<pii > un_ev;
- int vis[R][C], clk;
- //parseNd
- int dfs(int x,int y)
- {
- Node &u = nd[x][y];
- if(u.tp) return u.n;
- if(Err[x][y] == kas_clk) return ErrorCode;
- if(vis[x][y] == clk) {
- Err[x][y] = kas_clk;
- un_ev.push_back(pii(x,y));
- return ErrorCode;
- }
- vis[x][y] = clk;
- int ans = , sz = u.s.size();
- //stack<char> stk;
- for(int i = ; i < sz; i++){
- if(isalpha(u.s[i])){
- int val = dfs(u.s[i]-'A',u.s[i+]-'');
- if(val == ErrorCode) {
- if(Err[x][y] != kas_clk){
- Err[x][y] = kas_clk;
- un_ev.push_back(pii(x,y));
- }
- return ErrorCode;
- }
- char op = i?u.s[i-]:'+';//stk.top(); stk.pop();
- ans += op=='+'?val:-val;
- i++;
- }
- else if(isdigit(u.s[i])){
- int j = i+;
- while(j < sz && isdigit(u.s[j])) j++;
- int val = atoi(u.s.substr(i,j).c_str());
- ans += u.s[i-]=='+'?val:-val;
- i = j-;
- }
- //if(s[i] == '+' || s[i] == '-'){
- //}
- }
- u.tp = true;
- return u.n = ans;
- }
- void init()
- {
- un_ev.reserve(R*C);
- }
- int r,c;
- void solve()
- {
- for(int i = ; i < r; i++){
- for(int j = ; j < c; j++){
- readNd(i,j);
- }
- }
- kas_clk++;
- for(int i = ; i < r; i++)
- for(int j = ; j < c; j++){
- if(Err[i][j] != kas_clk){
- clk++;
- dfs(i,j);
- }
- }
- if(un_ev.size()){
- sort(un_ev.begin(),un_ev.end());
- //un_ev.erase(unique(un_ev.begin(),un_ev.end()),un_ev.end());
- for(auto p: un_ev){
- int x = p.first, y = p.second;
- printf("%c%c: %s\n",x+'A',y+'',nd[x][y].s.c_str());
- }
- un_ev.clear();
- }
- else {
- putchar(' ');
- for(int j = ; j < c; j++) printf("%6d",j);
- puts("");
- for(int i = ; i < r; i++){
- putchar(i+'A');
- for(int j = ; j < c; j++){
- printf("%6d",nd[i][j].n);
- }
- puts("");
- }
- }
- puts(""); //注意格式
- }
- //#define LOCAL
- int main()
- {
- #ifdef LOCAL
- freopen("in.txt","r",stdin);
- #endif
- //ios::sync_with_stdio(false);
- //cin.tie(nullptr);
- init();
- while(scanf("%d%d\n",&r,&c),r+c){
- solve();
- }
- return ;
- }
UVA 215 Spreadsheet Calculator (模拟)的更多相关文章
- Spreadsheet Calculator 电子表格计算器 (Uva 215)
原题:https://uva.onlinejudge.org/external/2/215.pdf 有一个M x N的表格,每个单元格是个数字或者表达式.表达式由单元格编号和+ - 号组成 输出单元格 ...
- 【set&&sstream||floyed判环算法】【UVa 11549】Calculator Conundrum
CALCULATOR CONUNDRUM Alice got a hold of an old calculator that can display n digits. She was bored ...
- UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVA 1156 - Pixel Shuffle(模拟+置换)
UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...
- UVA 12050 - Palindrome Numbers 模拟
题目大意:给出i,输出第i个镜像数,不能有前导0. 题解:从外层开始模拟 #include <stdio.h> int p(int x) { int sum, i; ;i<=x;i+ ...
- Uva 679 Dropping Balls (模拟/二叉树的编号)
题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...
- ●UVa 1589 Xiangqi(模拟)
●赘述题意 给出一个中国象棋残局,告诉各个棋子的位置,黑方只有1枚“将”,红方有至少2枚,至多7枚棋子,包含1枚“帅G”,和若干枚“车R”,“马H”,“炮C”.当前为黑方的回合,问黑方的“将”能否在移 ...
- Uva - 512 - Spreadsheet Tracking
Data in spreadsheets are stored in cells, which are organized in rows (r) and columns (c). Some oper ...
- 【每日一题】 UVA - 213 Message Decoding 模拟解码+读入函数+阅读题
题意:阅读理解难度一道比一道难orz.手摸了好久样例 题解: 读入:大循环用getline读入header顺便处理一下, 里面再写两重循环,外层一次读三个串,内层一次读num个串. 之后就查表,线性 ...
随机推荐
- webpack@3.6.0(2) -- css及图片相关问题
本篇内容 css3前缀处理postcss 消除未使用的css部分 图片处理 css分离和分离后的图片处理 css3前缀处理postcss cnpm i -D postcss-loader autopr ...
- App裂变活动多种玩法解析
移动互联网时代,流量为王.在App获取流量的过程中,有资金的砸广告,没资金的铺渠道,但是不管你有钱没钱,社交平台都是必须重点争夺的流量阵地. 毕竟,截至2018年底,微信及WeChat的合并月活跃账户 ...
- UIDevice的简易说明
typedef NS_ENUM(NSInteger, UIDeviceOrientation) //设备方向 { UIDeviceOrientationUnknown, UIDeviceOrienta ...
- css3中的变形(transform)、过渡(transtion)、动画(animation)
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...
- oracle数据库的导入导出命令
说明:将以下命令复制到cmd命令行中运行即可,file代表文件名数据导入imp zzbweb/zzbweb@orcl file=e:\zzbweb.dmp fromuser=zzbweb touser ...
- HDU-2588-GCD (欧拉函数)
The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the ...
- GCD Guessing Game Gym - 100085G 猜数字 gcd
http://codeforces.com/gym/100085/attachments 因为那个数字是一个质数,这样的猜的次数是最多的,所以至少是质数次. 但是如果需要猜2.3,那么可以直接猜6,也 ...
- Unity [RequireComponent(typeof(组件名))]
- Java面向对象_接口应用——策略模式
概念:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化. 接口抽象的就是某种方法. OO设计原则:1.面向接口编程 2.封装变化 3.多用 ...
- 【JavaEE】tomcat部署项目的几种方式 .
一.静态部署1.直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP程 ...