UVA - 442 Matrix Chain Multiplication(栈模拟水题+专治自闭)
题目:
给出一串表示矩阵相乘的字符串,问这字符串中的矩阵相乘中所有元素相乘的次数。
思路:
遍历字符串遇到字母将其表示的矩阵压入栈中,遇到‘)’就将栈中的两个矩阵弹出来,然后计算这两个矩阵的元素相乘的次数,累加就可以了。
PS:注意弹出的矩阵表示的先后顺序。
代码:
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define MAX 1000000000
#define mod 1000000007
#define FRE() freopen("in.txt","r",stdin)
#define FRO() freopen("out.txt","w",stdout)
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
const int maxn = ;
int n;
struct MAT{
int x,y;
}mat[maxn]; int main(){
//FRE();
cin>>n;
for(int i=; i<n; i++){
char id;
int x,y;
cin>>id>>x>>y;
mat[id-'A'].x = x;
mat[id-'A'].y = y;
}
// for(int i=0; i<26; i++){
// cout<<mat[i].x<<" "<<mat[i].y<<endl;
// }
string str;
stack<MAT> sta;
while(cin>>str){
int ans=,ok=;
for(int i=; i<str.length(); i++){
if(isupper(str[i])){
sta.push(mat[str[i]-'A']);
}else if(str[i]==')'){
MAT t1 = sta.top();sta.pop();
MAT t2 = sta.top();sta.pop();
//cout<<t1.x<<" FUCK "<<t1.y<<" FUCK "<<t2.x<<" FUCK "<<t2.y<<endl;
if(t1.x!=t2.y){//注意弹出来的两个矩阵的先后顺序(栈的特点)
ok = ;
break;
}
ans += t2.x*t2.y*t1.y;//计算元素相乘的次数并累加
sta.push(MAT{t2.x,t1.y});
}
}
if(ok){
cout<<"error"<<endl;
}else{
cout<<ans<<endl;
}
while(!sta.empty())sta.pop();
}
return ;
}
UVA - 442 Matrix Chain Multiplication(栈模拟水题+专治自闭)的更多相关文章
- UVA——442 Matrix Chain Multiplication
442 Matrix Chain MultiplicationSuppose you have to evaluate an expression like A*B*C*D*E where A,B,C ...
- UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
意甲冠军 由于矩阵乘法计算链表达的数量,需要的计算 后的电流等于行的矩阵的矩阵的列数 他们乘足够的人才 非法输出error 输入是严格合法的 即使仅仅有两个相乘也会用括号括起来 并且括号中 ...
- UVa 442 Matrix Chain Multiplication(栈的应用)
题目链接: https://cn.vjudge.net/problem/UVA-442 /* 问题 输入有括号表示优先级的矩阵链乘式子,计算该式进行的乘法次数之和 解题思路 栈的应用,直接忽视左括号, ...
- stack UVA 442 Matrix Chain Multiplication
题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...
- UVa442 Matrix Chain Multiplication(栈)
#include<cstdio>#include<cstring> #include<stack> #include<algorithm> #inclu ...
- 例题6-3 Matrix Chain Multiplication ,Uva 442
这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试 得到的经验有以下几点: 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习 有时候代码不对,得到的结果却是对的(之后总结以下常见 ...
- UVA 442 二十 Matrix Chain Multiplication
Matrix Chain Multiplication Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %l ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- ACM学习历程——UVA442 Matrix Chain Multiplication(栈)
Description Matrix Chain Multiplication Matrix Chain Multiplication Suppose you have to evaluate ...
随机推荐
- 玲珑学院OJ 1028 - Bob and Alice are playing numbers 字典树,dp
http://www.ifrog.cc/acm/problem/1028 题解处:http://www.ifrog.cc/acm/solution/4 #include <cstdio> ...
- Unity3D游戏,TCP,WEBCOSKT,HTTP通信架构 weaving-socket
weaving-socket 详细介绍 项目简介 2017-8-8:新发布功能 增加U3D游戏客户的通讯项目支持,并提供示例内容. 2017-5-5: 新发布 weaving-socket 架构的.n ...
- hdoj--1379--DNA Sorting(排序水题)
DNA Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 使用IntelliJ IDEA 创建Maven项目(入门)
一. 下载Maven 下载地址:http://maven.apache.org/download.cgi tar.gz压缩格式用于unix操作系统,而zip用于windows的操作系统,但在windo ...
- Redis Jedsi使用方法
JedisPoolConfig:用于配置Jedis连接池的配置 JedisPool:使用连接池获取Jedis连接 Jedis:实际与Redis进行一系列的操作 代码示例: public void de ...
- 【WIP_S2】递归
创建: 2018/01/14 递归 定义 自己召唤自己 通用形式 if (基本情况A的处理) { ... return 值A } else if (基本情况B的处理) ...
- c++病毒函数
FreeConsole(); 屏蔽输出. BlockInput(); 阻止键盘和鼠标的工作. 所需头文件: #include <windows.h> #include <Winabl ...
- Coding Pages 服务与万网域名的配置
1071220 http://support.huawei.com/learning/NavigationAction!createNavi?navId=MW000001_term1000190292 ...
- CodeDOMProvider 类
CodeDomProvider 可用来创建和检索代码生成器和代码编译器的实例.代码生成器可以生成特定语言的代码,如:C#.Visual Basic.JScript 等,而代码编译器可以将代码文件编译成 ...
- 震惊!double输入输出的秘密竟然是~
遇到了一个神奇的事情: double r = 3.0; printf("%lf", r);//0.000000 double遇到printf函数竟然是用%f输出的! scanf函数 ...