#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct __Stack_ts { int row; int col; struct __Stack_ts* next; } Stack_ts; Stack_ts* Stack_new(int row, int col) { Stack_ts* result = NULL; result = (Stack_ts*)malloc(sizeof(Stack_ts)); result->row = row; result->col = col; result->next = NULL; return result; } Stack_ts* Stack_push(Stack_ts* head, int row, int col) { Stack_ts* result = NULL; Stack_ts* node = NULL; node = Stack_new(row, col); node->next = head; head = node; result = head; return result; } Stack_ts* Stack_pop(Stack_ts* head, int* row, int* col) { Stack_ts* result = NULL; Stack_ts* node = NULL; if (head != NULL) { node = head; *row = node->row; *col = node->col; head = head->next; free(node); } else {} result = head; return result; } int main() { int a[15][2] = {}; int a1[2],a2[2]; int n,i,length; char s[15+28+1] = {}; int sum = 0; Stack_ts* num = NULL; scanf("%d", &n); for (i=0; i<n; ++i) { scanf("%d %d", &a[i][0], &a[i][1]); } scanf("%s", s); length = strlen(s); for (i=0; i<length; ++i) { if (s[i] == ')') { num = Stack_pop(num, &a2[0], &a2[1]); num = Stack_pop(num, &a1[0], &a1[1]); sum += a1[0]*a2[1]*a1[1]; num = Stack_push(num, a1[0], a2[1]); } else if (s[i]>='A' && s[i]<='Z') { num = Stack_push(num, a[s[i]-'A'][0], a[s[i]-'A'][1]); } else {} } printf("%d", sum); return 0; }