紫书例题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;
}
View Code

 

以上是关于紫书例题6-3 (UVa 442)的主要内容,如果未能解决你的问题,请参考以下文章

紫书例题6-4 (UVa 11988)

紫书140例题6-2 铁轨&&UVa514

紫书例题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)