http://acm.pku.edu.cn/JudgeOnline/problem?id=1105
Код:
#include <stdio.h> #define MAX_DEPTH 12 int main() { int n, m; int VO[MAX_DEPTH]; char VarValues[MAX_DEPTH + 2]; char TermNodes[(1 << MAX_DEPTH) + 2]; int i, j, tmp; int cnt = 1; while (1) { scanf(" %d\n", &n); if (!n) break; printf("S-Tree #%d:\n", cnt++); for (i = 0; i < n; i++) { scanf(" x%d", &tmp); VO[i] = tmp - 1; } scanf("%s", TermNodes); scanf(" %d\n", &m); for (i = 0; i < m; i++) { int pos = 0; scanf("%s", VarValues); for (j = 0; j < n; j++) { if (VarValues[VO[j]] == '1') pos |= (1 << (n - VO[j] - 1)); } printf("%c", TermNodes[pos]); /* Output the results */ } printf("\n\n"); } return 0; }