1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<sstream>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<vector>
  8. #include<cmath>
  9. #include<map>
  10. #include<stack>
  11. #include<set>
  12. #include<fstream>
  13. #include<memory>
  14. #include<string>
  15. using namespace std;
  16. typedef long long LL;
  17. typedef unsigned long long ULL;
  18. #define MAXN 102
  19. #define INF 1000000009
  20. /*
  21. 利用栈解析表达式
  22. */
  23. struct Matrix
  24. {
  25. int a, b;
  26. Matrix(int _a = ,int _b=):a(_a),b(_b){}
  27. }m[];
  28. stack<Matrix> s;
  29. int main()
  30. {
  31. int n;
  32. scanf("%d", &n);
  33. string str;
  34. for (int i = ; i < n; i++)
  35. {
  36. cin >> str;
  37. int k = str[] - 'A';
  38. cin >> m[k].a >> m[k].b;
  39. }
  40. string expr;
  41. while (cin >> expr)
  42. {
  43. int len = expr.length();
  44. bool error = false;
  45. int ans = ;
  46. for (int i = ; i < len; i++)
  47. {
  48. if (isalpha(expr[i]))
  49. s.push(m[expr[i] - 'A']);
  50. else if (expr[i] == ')')
  51. {
  52. Matrix m2 = s.top(); s.pop();
  53. Matrix m1 = s.top(); s.pop();
  54. if (m1.b != m2.a)
  55. {
  56. error = true;
  57. break;
  58. }
  59. ans += m1.a*m1.b*m2.b;
  60. s.push(Matrix(m1.a, m2.b));
  61. }
  62. }
  63. if (error)
  64. cout << "error\n";
  65. else
  66. cout << ans << endl;
  67. }
  68. }

矩阵连乘 LRJ白书 p141 栈 解析表达式的更多相关文章

  1. 倒水问题(Fill,UVA 10603) lrj白书 p202

    看着lrj的代码自己敲了一遍,还没调试成功.... 有时间再进行完善 /* 状态start到各个状态u1,u2,u3..... 的倒水量分别为u1.dist,u2.dist,u3.dist.... * ...

  2. Uva 548 二叉树的递归遍历lrj 白书p155

    直接上代码... (另外也可以在递归的时候统计最优解,不过程序稍微复杂一点) #include <iostream> #include <string> #include &l ...

  3. Uva 122 树的层次遍历 Trees on the level lrj白书 p149

    是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担 ...

  4. 白书P61 - 点集配对问题

    白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using ...

  5. 白书P60 - 硬币问题

    白书P60 - 硬币问题 完全背包.DP #include <iostream> #include <cstdio> #include <cstring> usin ...

  6. poj2991 Crane(线段树+集合)白书例题

    题目大意:起重机有n节,题目给出要调节的k节,每节调节成x度,求最后底部的起重机的坐标(最顶上的起点为(0,0)). 分析:一开始我看白书,看不懂他那个向量旋转的坐标是怎么来的,翻了很多博客,才发现, ...

  7. Uva10474-STL水题-白书

    白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> ...

  8. UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494

    白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ...

  9. 《白书》上线段树RMQ的实现

    白书上的线段树RMQ实现,自己重写了一遍: #include <bits/stdc++.h> using namespace std; const int MAXN=1<<17 ...

随机推荐

  1. 将本地文件复制到hadoop文件系统

    package com.yoyosys.cebbank.bdap.service.mr; import java.io.BufferedInputStream; import java.io.File ...

  2. 软RAID管理

    软RAID管理 软RAID 软RAID 提供管理界面:mdadm 软RAID为空余磁盘添加冗余,结合了内核中的md(multi devices). RAID 设备可命名为/dev/md0./dev/m ...

  3. 原生方式实现Ajax技术

    一:什么是Ajax? Ajax:异步的JavaScript和XML,用于完成网页局部刷新功能(修改少量数据只用局部刷新,不用再整个网页重新加载): XML的作用:1.是用于数据传输,但现在都在使用JS ...

  4. HTML中的行级标签和块级标签 《转换》

    1.html中的块级标签 显示为“块”状,浏览器会在其前后显示折行.常用的块级元素包括: <p>, <ul>,<table>,<h1~h6>等. 2.h ...

  5. 给定的逗号分隔的数字字符串转换为Table

    --将给定的逗号分隔的数字字符串转换为Table CREATE FUNCTION [dbo].[fu_Split](@strString nvarchar(4000)) RETURNS @Result ...

  6. html5——多媒体(四)

    全屏兼容 box.requestFullscreen(); box.webkitRequestFullScreen(); box.mozRequestFullScreen(); <!DOCTYP ...

  7. SQL基本操作——select into与临时表

    SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中,常用于创建表的备份复件或者用于对记录进行存档. --制作 "Persons" 表的备份复件: SELECT ...

  8. Xamarin.Forms实现touch事件

    Xamarin.Forms的View没有touch事件,只能自己实现 首先,在共享项目里面,放入这几个类,结构大概是这样的: using System; using Xamarin.Forms; na ...

  9. 本地读取服务器Xml文件及本地读本地的xml

    updateUrl="ServerUrl"(服务器路径) WebClient wc = new WebClient(); Stream stream = wc.OpenRead(u ...

  10. Oracle,sqlserver,mySQl的区别和联系:

    1.日期处理方式 2.对保留字和关键字的处理方式: Oracle,sqlserver,mySQl的保留字不可以用作列字段,关键字可以,但他们对关键字的处理方式又不同: Oracle:关键字作为列时:用 ...