UVA442

Posted torettorui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA442相关的知识,希望对你有一定的参考价值。

这道题目很简单,就是表达式的计算问题。注意这个里面使用的表达式的计算方式,仅限于这道题目中定义的合法的表达式。

另外,发现我自己有点魔怔了,连输入的方式都非要这样那样了。是该总结一下,输入的所有方式了。

下面贴出这道题的代码:

#include<cstdio>
#include<vector>
#include<stack>
#include<string>
#include<iostream>
using namespace std;

int num_matri;

struct Matric
{
    int row;
    int col;
}matric[26];

int main()
{
#ifdef local
    freopen("input.txt","r",stdin);
#endif
    scanf("%d",&num_matri);
    for(int i=0;i<num_matri;i++)//输入矩阵
    {
        char alph[2];
        scanf("%s",alph);
        int row,col;
        scanf("%d%d",&row,&col);
        matric[alph[0]-A].row=row;
        matric[alph[0]-A].col=col;
    }
    string line;
    while(cin>>line)//输入保证合法,括号可以不入栈
    {
        stack<Matric>Stack;
        int num=0;
        bool error=false;
        for(int i=0;i<line.size();i++)
        {
            if(line[i]==()
                continue;
            if(isalpha(line[i]))
            {
                Stack.push(matric[line[i]-A]);
            }
            if(line[i]==))
            {
                Matric a=Stack.top();//结构体可以给结构体赋值,大整数类是因为赋值的时候不是大整数类赋的值
                Stack.pop();
                Matric b=Stack.top();
                Stack.pop();
                if(b.col!=a.row)
                {
                    error=true;
                    break;
                }
                Matric c;
                c.row=b.row;
                c.col=a.col;
                Stack.push(c);
                num+=c.row*c.col*b.col;
            }
        }
        if(error)
        {
            printf("error
");
        }
        else
        {
            printf("%d
",num);
        }
    }
    return 0;
}

 

以上是关于UVA442的主要内容,如果未能解决你的问题,请参考以下文章

UVa 442 矩阵链乘

栈-uva 442

UVA - 442 Matrix Chain Multiplication(栈模拟水题+专治自闭)

UVA442-栈

UVa 442 Matrix Chain Multiplication(栈的应用)

UVa442 Matrix Chain Multiplication (栈)