模拟题。每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复。

这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写。注意细节,注意格式。

  1. /*********************************************************
  2. * --------------Tyrannosaurus--------- *
  3. * author AbyssalFish *
  4. **********************************************************/
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9.  
  10. const int R = , C = , LEN = ;
  11.  
  12. struct Node
  13. {
  14. int n;
  15. string s;
  16. bool tp; //1 num 0 expr
  17. Node(){ s.reserve(LEN); }
  18. }nd[R][C];
  19. int Err[R][C], kas_clk;
  20.  
  21. void readNd(int x,int y)
  22. {
  23. Node &u = nd[x][y];
  24. getline(cin, u.s);
  25. u.tp = !isalpha(u.s[]);// - ,1, A
  26. if(u.tp) {
  27. stringstream ssin(u.s);
  28. ssin>>u.n;
  29. }
  30. }
  31.  
  32. const int ErrorCode = <<;
  33.  
  34. typedef pair<int,int> pii;
  35. vector<pii > un_ev;
  36.  
  37. int vis[R][C], clk;
  38. //parseNd
  39. int dfs(int x,int y)
  40. {
  41. Node &u = nd[x][y];
  42. if(u.tp) return u.n;
  43. if(Err[x][y] == kas_clk) return ErrorCode;
  44. if(vis[x][y] == clk) {
  45. Err[x][y] = kas_clk;
  46. un_ev.push_back(pii(x,y));
  47. return ErrorCode;
  48. }
  49. vis[x][y] = clk;
  50. int ans = , sz = u.s.size();
  51. //stack<char> stk;
  52. for(int i = ; i < sz; i++){
  53. if(isalpha(u.s[i])){
  54. int val = dfs(u.s[i]-'A',u.s[i+]-'');
  55. if(val == ErrorCode) {
  56. if(Err[x][y] != kas_clk){
  57. Err[x][y] = kas_clk;
  58. un_ev.push_back(pii(x,y));
  59. }
  60. return ErrorCode;
  61. }
  62. char op = i?u.s[i-]:'+';//stk.top(); stk.pop();
  63. ans += op=='+'?val:-val;
  64. i++;
  65. }
  66. else if(isdigit(u.s[i])){
  67. int j = i+;
  68. while(j < sz && isdigit(u.s[j])) j++;
  69. int val = atoi(u.s.substr(i,j).c_str());
  70. ans += u.s[i-]=='+'?val:-val;
  71. i = j-;
  72. }
  73. //if(s[i] == '+' || s[i] == '-'){
  74. //}
  75. }
  76. u.tp = true;
  77. return u.n = ans;
  78. }
  79.  
  80. void init()
  81. {
  82. un_ev.reserve(R*C);
  83. }
  84.  
  85. int r,c;
  86. void solve()
  87. {
  88. for(int i = ; i < r; i++){
  89. for(int j = ; j < c; j++){
  90. readNd(i,j);
  91. }
  92. }
  93. kas_clk++;
  94. for(int i = ; i < r; i++)
  95. for(int j = ; j < c; j++){
  96. if(Err[i][j] != kas_clk){
  97. clk++;
  98. dfs(i,j);
  99. }
  100. }
  101. if(un_ev.size()){
  102. sort(un_ev.begin(),un_ev.end());
  103. //un_ev.erase(unique(un_ev.begin(),un_ev.end()),un_ev.end());
  104. for(auto p: un_ev){
  105. int x = p.first, y = p.second;
  106. printf("%c%c: %s\n",x+'A',y+'',nd[x][y].s.c_str());
  107. }
  108. un_ev.clear();
  109. }
  110. else {
  111. putchar(' ');
  112. for(int j = ; j < c; j++) printf("%6d",j);
  113. puts("");
  114. for(int i = ; i < r; i++){
  115. putchar(i+'A');
  116. for(int j = ; j < c; j++){
  117. printf("%6d",nd[i][j].n);
  118. }
  119. puts("");
  120. }
  121. }
  122. puts(""); //注意格式
  123. }
  124.  
  125. //#define LOCAL
  126. int main()
  127. {
  128. #ifdef LOCAL
  129. freopen("in.txt","r",stdin);
  130. #endif
  131. //ios::sync_with_stdio(false);
  132. //cin.tie(nullptr);
  133. init();
  134. while(scanf("%d%d\n",&r,&c),r+c){
  135. solve();
  136. }
  137. return ;
  138. }

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. webpack@3.6.0(2) -- css及图片相关问题

    本篇内容 css3前缀处理postcss 消除未使用的css部分 图片处理 css分离和分离后的图片处理 css3前缀处理postcss cnpm i -D postcss-loader autopr ...

  2. App裂变活动多种玩法解析

    移动互联网时代,流量为王.在App获取流量的过程中,有资金的砸广告,没资金的铺渠道,但是不管你有钱没钱,社交平台都是必须重点争夺的流量阵地. 毕竟,截至2018年底,微信及WeChat的合并月活跃账户 ...

  3. UIDevice的简易说明

    typedef NS_ENUM(NSInteger, UIDeviceOrientation) //设备方向 { UIDeviceOrientationUnknown, UIDeviceOrienta ...

  4. css3中的变形(transform)、过渡(transtion)、动画(animation)

    Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...

  5. oracle数据库的导入导出命令

    说明:将以下命令复制到cmd命令行中运行即可,file代表文件名数据导入imp zzbweb/zzbweb@orcl file=e:\zzbweb.dmp fromuser=zzbweb touser ...

  6. HDU-2588-GCD (欧拉函数)

    The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the ...

  7. GCD Guessing Game Gym - 100085G 猜数字 gcd

    http://codeforces.com/gym/100085/attachments 因为那个数字是一个质数,这样的猜的次数是最多的,所以至少是质数次. 但是如果需要猜2.3,那么可以直接猜6,也 ...

  8. Unity [RequireComponent(typeof(组件名))]

  9. Java面向对象_接口应用——策略模式

    概念:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化. 接口抽象的就是某种方法. OO设计原则:1.面向接口编程  2.封装变化  3.多用 ...

  10. 【JavaEE】tomcat部署项目的几种方式 .

    一.静态部署1.直接将web项目文件件拷贝到webapps 目录中     Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP程 ...