UVA-442数据结构调用栈,注意括号的处理

此处一定要注意当遇到后括号的时候就计算,因为一对括号中至多包含两个矩阵,及时去掉括号,还是看了clevermike的博客后才弄懂的

#include<iostream>
#include<string>
#include<stdio.h>
#include<stack>
using namespace std;
int n;
struct Node
{
    int l,r;
}node[300];
char ch;
int a,b,ans,t,i;
string str;
stack<int>s1;
stack<char>s2;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>ch>>a>>b;
        node[ch-'A'].l=a;node[ch-'A'].r=b;
    }
    getchar();
    while(getline(cin,str))
    {
        ans=0;t=31;
        int len=str.length();
        for( i=0;i<len;i++)
        {
            if(str[i]=='('||str[i]==')')
            {
                s2.push(str[i]);
                if(str[i]==')')
                {
                    if(!s1.empty())
                    {
                        int g,h;
                        h=s1.top();s1.pop();
                        g=s1.top();s1.pop();
                        if(node[g].r!=node[h].l)break;
                        ans+=node[g].l*node[g].r*node[h].r;
                        node[t].l=node[g].l;
                        node[t].r=node[h].r;
                        s1.push(t);
                        t++;
                        s2.pop();s2.pop();
                    }
                }
            }
            else s1.push(str[i]-'A');
        }
        if(i<len)cout<<"error"<<endl;
        else cout<<ans<<endl;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值