题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1170
Time Limit: 1000 MS Memory Limit: 65536 K

Description

欢迎大家加入ACM!
要深入的学习ACM的相关知识,首先就必须学会一门编程语言,推荐C/C++。
不过对于初学者,因为没编过多少代码,经常出现变异错误,其实就是语法错误。
现在要你检查一段代码的语法是否否正确。
为了简化问题,我们只检查 (、)、{、} 括号是否匹配了,并且在输入的代码中不包含字符的'(',')','{','}'。
其他语法错误不检查,如 "#include <stdio.h","2 = x",是错误的,但是不检查。

Input

有多组测试数据,每组测试数据有一段代码,该段代码可能在有多行。
每段代码以Ctrl+Z结束。
处理到文件结束。

Output

每组测试数据输出一行。
如果这段代码括号匹配了,输出 Right ,否则输出 Wrong。

Sample Input

#include <stdio.h
int main(){
    int a b;
    while (scanf("%d%d", &a, &b) != EOF) {
        printf("%d\n", a + b);
    }
}
Ctrl+Z
int main(){
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF) {
        printf("%d\n", a + b);
   
}
Ctrl+Z

Sample Output

Right
Wrong

Problem solving report:

Description: 判断'(',')','{','}'配对是否合法。
Problem solving: 这个只需要维护一个栈就行了,遇到'('、'{'就进栈,遇到')'、'}'就判断栈顶元素是不是与之配对的'('、'{',是就出栈不是就不合法。

Accepted Code:

#include <bits/stdc++.h>
using namespace std;
typedef char ElemType;
typedef struct ListPtr {
    ElemType data;
    ListPtr *prior;
}*lists;
int len;
lists head, tail;
void Alloc(lists &p) {
    p = (ListPtr *)malloc(sizeof(ListPtr));
    p -> prior = NULL;
}
void link() {
    len = 0;
    Alloc(head);
    tail = head;
}
void push(ElemType e) {
    lists p;
    Alloc(p);
    p -> data = e;
    p -> prior = tail;
    tail = p;
    len++;
}
void pop() {
    len--;
    lists p = tail;
    tail = tail -> prior;
    free(p);
}
ElemType top() {
    return tail -> data;
}
int main() {
    int tmp;
    char str[1005], s[105];
    while (~scanf("%s", str)) {
        while (scanf("%s", s)) {
            if (!strcmp(s, "Ctrl+Z"))
                break;
            strcat(str, s);
        }
        link();
        tmp = 0;
        for (int i = 0; str[i]; i++) {
            if (str[i] == '(' || str[i] == '{')
                push(str[i]);
            else {
                if (str[i] == ')') {
                    if (!len || top() != '(') {
                        tmp = 1;
                        break;
                    }
                    else pop();
                }
                else if (str[i] == '}') {
                    if (!len || top() != '{') {
                        tmp = 1;
                        break;
                    }
                    else pop();
                }
            }
        }
        if (tmp || len)
            printf("Wrong\n");
        else printf("Right\n");
    }
    return 0;
}