矩陣鏈乘 UVA442
阿新 • • 發佈:2018-12-31
題目並不複雜,程式碼相對也比較好寫,只是想記錄解析表示式的方法,用棧來處理解析式,遇到字母時入棧,遇到右括號時出棧計算,並將結果壓回棧中。
#include<bits/stdc++.h> using namespace std; struct Matrix { int a,b; Matrix(int a=0,int b=0):a(a),b(b) { } }m[26]; stack<Matrix> s; int main() { int n; cin>>n; for(int i=0;i<n;i++) { string name; cin>>name; int k=name[0]-'A'; cin>>m[k].a>>m[k].b; } string expr; while(cin>>expr) { int len=expr.length(); bool error=false; int ans=0; for(int i=0;i<len;i++) { if(isalpha(expr[i])) s.push(m[expr[i]-'A']); else if(expr[i]==')') { Matrix m2=s.top(); s.pop(); Matrix m1=s.top(); s.pop(); if(m1.b!=m2.a) { error=true; break; } else{ ans+=m1.a*m1.b*m2.b; s.push(Matrix(m1.a,m2.b)); } } } if(error) printf("error\n"); else printf("%d\n",ans); } return 0; }