紫书例题6-3 (UVa 442)
Posted abszse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了紫书例题6-3 (UVa 442)相关的知识,希望对你有一定的参考价值。
题目地址:https://vjudge.net/problem/UVA-442
题目大意:汗颜,其实我是直接看紫书的中文题意的,大意就是计算两个矩阵乘法次数,设计线性代数知识,可自己百度矩阵乘法。
思路:栈+模拟,左括号开始入栈,右括号开始计算栈顶两个矩阵的乘法次数然后再将新矩阵的n,m入栈即可。
AC代码:
#include <iostream> #include <string> #include <stack> #include <cstring> using namespace std; struct node { int m,n; }s[30]; //结构体,记录n,m int main() { int n; cin >> n; for(int i=1;i<=n;i++) { char ch; cin >> ch; cin >> s[ch-‘A‘].m >> s[ch-‘A‘].n; } int flag=0; int ans=0; char ch[50]; while(cin>>ch) { ans=0; stack <node> q; flag=0; for(int i=0;i<strlen(ch);i++) { if(ch[i]!=‘)‘&&ch[i]!=‘(‘) //如果是字母就入栈,并且直接转化成n*m q.push(s[ch[i]-‘A‘]); else if(ch[i]==‘)‘) { node b=q.top(); q.pop(); node a=q.top(); q.pop(); if(a.n!=b.m) { flag=1; break; } else { ans+=a.m*a.n*b.n; //累计加和 node c; c.m=a.m; c.n=b.n; q.push(c); //这里可以写出q.push(a.m,b.n) } } } if(!flag) cout << ans << endl; else cout << "error" << endl; } return 0; }
以上是关于紫书例题6-3 (UVa 442)的主要内容,如果未能解决你的问题,请参考以下文章
紫书例题3-5 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
紫书例题3-3 回文词(Palindromes, UVa401)
二叉树层序遍历,Trees on the level UVA - 122——紫书第六章例题和字符串新解
紫书例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)