Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 1756 | Accepted: 1134 |
Descriptionexpress
Inputapi
SecondPart = Line { Line } Line = Expression Expression = Matrix | "(" Expression Expression ")" Matrix = "A" | "B" | "C" | ... | "X" | "Y" | "Z"複製代碼
Output數組
Sample Inputbash
9
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))
複製代碼
Sample Outputmarkdown
0
0
0
error
10000
error
3500
15000
40500
47500
15125複製代碼
解題代碼lua
1 #include "stdio.h" 2 #include <ctype.h> 3 #include <stack> 4 5 char m[30][3]; 6 char n[30][3]; 7 int num=0; 8 void reset(); 9 int countMartrix(int a,int b); 10 int findMatrix(char A); 11 int main(){ 12 #ifdef TEST 13 freopen("test.txt","r",stdin); 14 freopen("testout.txt","w",stdout); 15 #endif 16 17 scanf("%d",&num); 18 int i=0; 19 for (i=0;i<num;i++) 20 { 21 getchar(); 22 scanf("%c %d %d",&m[i][0],&m[i][1],&m[i][2]); 23 } 24 getchar(); 25 int resu=0; 26 i=0; 27 char buf[100],tmp1,tmp2; 28 std::stack<char> s; 29 while (fgets(buf,100,stdin)!=NULL) 30 { 31 reset();//對原來的各個矩陣的行和列數進行保存 32 while(buf[i]!='\0'){ 33 if(buf[i]==')'){ 34 tmp1=s.top(); 35 s.pop(); 36 tmp2=s.top(); 37 s.pop(); 38 int tmp1_pos=0,tmp2_pos=0; 39 tmp1_pos=findMatrix(tmp1);//找到矩陣在數組中的位置 40 tmp2_pos=findMatrix(tmp2); 41 if (tmp1_pos>=0&&tmp2_pos>=0){ 42 if(countMartrix(tmp2_pos,tmp1_pos)==-1){ 43 resu=-1; 44 break;} 45 else resu+=countMartrix(tmp2_pos,tmp1_pos); 46 } 47 s.pop(); 48 n[tmp2_pos][2]=n[tmp1_pos][2];//更新相乘事後的矩陣的列數,而後壓棧處理 49 s.push(tmp2); 50 } 51 else s.push(buf[i]); 52 i++; 53 } 54 if(resu>=0) 55 printf("%d\n",resu); 56 else printf("error\n"); 57 resu=0; 58 i=0; 59 while(s.empty()==false) 60 s.pop(); 61 } 62 63 64 return 0; 65 } 66 67 int countMartrix(int a,int b){//判斷矩陣是否能夠相乘 68 if (n[a][2]==n[b][1]) 69 return n[a][1]*n[a][2]*n[b][2]; 70 else 71 return -1; 72 } 73 int findMatrix(char a){//找到數組中矩陣的位置 74 bool ifind; 75 int i=0; 76 for (i=0;i<num;i++) 77 { 78 if (m[i][0]==a){ 79 ifind=true; 80 break;} 81 } 82 if(ifind) 83 return i; 84 return -1; 85 } 86 void reset(){ 87 for (int i=0;i<num;i++) 88 { 89 n[i][0]=m[i][0]; 90 n[i][1]=m[i][1]; 91 n[i][2]=m[i][2]; 92 } 93 }複製代碼