poj2246 stl

来源:互联网 发布:淘宝虚拟物品代理 编辑:程序博客网 时间:2024/06/03 17:15

题意:已知一些矩阵的行数和列数,给你这些矩阵的算式,只包括括号和乘法,让你判断这些算式是否合法以及他们的运算次数。

两矩阵相乘,则前的列数必须等于后者的行数,用map储存矩阵的行和列,将矩阵存入栈中若读入左括号则跳过,若读入右括号,则取出栈顶两个矩阵判断二者能否相乘,注意顺序(先取出的行和后取的列),若读入一个矩阵则入栈

#include<cstdio>#include<algorithm>#include<iostream>#include<map>#include<stack>using namespace std;struct Node{int x;int y;};map<char,Node> mp;int main(){int n;cin>>n;for(int i=0;i<n;i++){    char c;    cin>>c;    cin>>mp[c].x>>mp[c].y;}string s;while(cin>>s){        int ans=0,i;        stack<Node> que;    for(i=0;i<s.size();i++){    if(s[i]=='('){        continue;    }    else if(s[i]==')'){        Node b=que.top();        que.pop();        Node a=que.top();        que.pop();        if(a.y!=b.x){            cout<<"error"<<endl;            break;        }        ans+=(a.x*a.y*b.y);        Node p;        p.x=a.x;        p.y=b.y;        que.push(p);    }    else if(s[i]<='Z'||s[i]>='A') que.push(mp[s[i]]);}if(i==s.size())cout<<ans<<endl;}}


0 0
原创粉丝点击