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 }

 

posted @ 2014-06-16 21:29  Naturain  阅读(110)  评论(0编辑  收藏  举报