模拟题。每个单元格有表达式就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 (模拟)的更多相关文章

  1. Spreadsheet Calculator 电子表格计算器 (Uva 215)

    原题:https://uva.onlinejudge.org/external/2/215.pdf 有一个M x N的表格,每个单元格是个数字或者表达式.表达式由单元格编号和+ - 号组成 输出单元格 ...

  2. 【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 ...

  3. UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  4. UVA 1156 - Pixel Shuffle(模拟+置换)

    UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...

  5. UVA 12050 - Palindrome Numbers 模拟

    题目大意:给出i,输出第i个镜像数,不能有前导0. 题解:从外层开始模拟 #include <stdio.h> int p(int x) { int sum, i; ;i<=x;i+ ...

  6. Uva 679 Dropping Balls (模拟/二叉树的编号)

    题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...

  7. ●UVa 1589 Xiangqi(模拟)

    ●赘述题意 给出一个中国象棋残局,告诉各个棋子的位置,黑方只有1枚“将”,红方有至少2枚,至多7枚棋子,包含1枚“帅G”,和若干枚“车R”,“马H”,“炮C”.当前为黑方的回合,问黑方的“将”能否在移 ...

  8. Uva - 512 - Spreadsheet Tracking

    Data in spreadsheets are stored in cells, which are organized in rows (r) and columns (c). Some oper ...

  9. 【每日一题】 UVA - 213 Message Decoding 模拟解码+读入函数+阅读题

    题意:阅读理解难度一道比一道难orz.手摸了好久样例 题解: 读入:大循环用getline读入header顺便处理一下,  里面再写两重循环,外层一次读三个串,内层一次读num个串. 之后就查表,线性 ...

随机推荐

  1. 飘逸的python - 单例模式乱弹

    方法一:装饰器 利用“装饰器只会执行一次”这个特点 def singleton(cls): instances = []# 为什么这里不直接为None,因为内部函数没法访问外部函数的非容器变量 def ...

  2. 51nod1419 【数学】

    思路: n<=3,就是n. 考虑n>3: 我们可以轻松证明n,n-1这两个数互质: 设gcd(n,n-1)=g,n=g*k1,n-1=g*k2; n-(n-1)=g(k1-k2)=1; 所 ...

  3. 树的直径+rmq+(伪)单调队列 -HDU4123

    给定一棵n个点并且有边权的树,每个点的权值为该点能走的最远长度,并输入m个询问,每次询问最多有多少个编号连续的点,他们的最大最小点权差小于等于Q.N<=50000 M<=500 Q< ...

  4. [Xcode 实际操作]四、常用控件-(4)UILabel文本标签的自动换行

    目录:[Swift]Xcode实际操作 本文将演示标签控件的换行功能, 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class Vie ...

  5. java 调用SAP RFC函数错误信息

    RFC接口调用SAP如果有异常会通过com.sap.mw.jco.JCO$Exception: 抛出异常 在开发中遇到的异常有如下 用户名密码可能是错误或者用户无权限,确认用户,必要时联系SAP负责人 ...

  6. 我的省选 Day -5

    Day -5 时间载着我们,一天又一天,呼啸而过. 已经记不清今天是Day 负几了,总之还有不到一个星期就要去参加选拔赛了. 写一下今晚做NOI2009的心路历程. T1题意有点绕,但很快看出是个二分 ...

  7. 小程序外部向组件内部传递externalClasses -- 传入样式wxss

    1.组件的JS添加配置 // 外部传入class类 externalClasses:['my-class'], 2.组件的wxml写法: 3.调用的页面 4.调用页面的wxss: 由于小程序的限制必须 ...

  8. Nginx停止服务和各种命令

    1.停止Nginx服务的四种方法 从容停止服务这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止. nginx -s quit 立即停止服务这种方法比较强硬,无论进程是否在工作,都直 ...

  9. 源码分析ConcurrentHashMap

    ConcurrentHashMap 1.7 segment分段锁 1.8 CAS 红黑树

  10. Practice encryptedblobstore

    C++ BlobStore 使用范例(C++伪代码) 一个可能的接口设计示例(C++) Java BlobStore 使用范例(Java伪代码) 一个可能的接口设计示例(Java) 一个基于Key/V ...