Uva--442 (栈应用)
2014-06-16 21:27:08
题意&思路:给出n个矩阵的row和column,并给出严格运算式,计算计算量。核心:遇到 ')' 运算stack里面的最顶的两个元素,运算完后保存结果(即结果还在stack里)
1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 7 struct Matrix{ 8 int row,col; 9 }; 10 Matrix m[30],stm[30]; 11 12 int main(){ 13 stack<char> s; 14 int n,tr,tc,sum,flag; 15 char t; 16 scanf("%d",&n); 17 getchar(); 18 for(int i = 0; i < n; ++i){ 19 scanf("%c %d %d",&t,&tr,&tc); 20 getchar(); 21 int num = (int)(t - 'A'); 22 stm[num].row = tr; 23 stm[num].col = tc; 24 } 25 //init 26 flag = 1; 27 sum = 0; 28 while(!s.empty()) 29 s.pop(); 30 memcpy(m,stm,sizeof(m)); 31 while(scanf("%c",&t) == 1){ 32 if(t == '\n'){ 33 if(flag){ 34 printf("%d\n",sum); 35 } 36 else{ 37 printf("error\n"); 38 } 39 //init; 40 while(!s.empty()) 41 s.pop(); 42 memcpy(m,stm,sizeof(m)); 43 sum = 0; 44 flag = 1; 45 continue; 46 } 47 if(flag && t >= 'A' && t <= 'Z'){ 48 s.push(t); 49 } 50 else if(flag && t == ')'){ 51 int b = (int)(s.top() - 'A'); 52 s.pop(); 53 int a = (int)(s.top() - 'A'); 54 if(m[a].col != m[b].row){ 55 flag = 0; 56 continue; 57 } 58 sum += m[a].row * m[a].col * m[b].col; 59 m[a].col = m[b].col; 60 } 61 } 62 return 0; 63 }