2173944 2006-12-17 23:15:34 Accepted 1097 C++ 00:00.02 876K Crux.D 烦题,输入巨无聊。如果不想自己写的话参考一下吧。 #include <iostream>#include <string>#include <cstring>using namespace std; string s;int a[51][51], b[51], c[51], si, mx; int node(){ int t = 0; while(s[si] >= '0' && s[si] <= '9') { t *= 10; t += s[si ++] - '0'; } return t;} void build(int n){ int t; if(n > mx) mx = n; while(s[si] == '(') { si ++; t = node(); if(n) { b[n] ++; b[t] ++; a[t][n] = 1; a[n][t] = 1; } build(t); si ++; }} void init(){ si = 0, mx = 0; memset(b, 0, sizeof(b)); memset(a, 0, sizeof(a)); memset(c, 0, sizeof(c)); int i; string ts = ""; for(i = 0; i < s.size(); i ++) { if(s[i] != ' ') ts += s[i]; } s = ts;} void print(){ int i, k, j, min, v; //pb(); for(i = 0; i < mx - 1; i ++) { if(i) printf(" "); min = mx; for(j = 1; j <= mx; j ++) { if(!c[j] && b[j] == 1 && min > j) min = j; } for(k = 1; k <= mx; k ++) { if(a[min][k] || a[k][min]) { v = k; break; } } printf("%d", v); a[min][v] = 0, a[v][min] = 0; b[v] --; c[min] = 1; b[min] = 0; //pa(); //pb(); } printf("\n");} int main(){ //freopen("in.txt", "r", stdin); while(getline(cin, s)) { init(); build(0); //pa(); print(); } return 0;}

评论