2014-06-20 17:14:17
题意&思路:题目很长,简单来说就是模拟一下小球下落。速1A。
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int main(){ 7 int Case = 0,pos,m,p[1005],n; 8 char c,leaf[1005],x[1005]; 9 while(scanf("%d",&n) == 1 && n){ 10 getchar(); 11 int cnt = 0; 12 while((c = getchar()) != '\n'){ 13 if(c >= '0' && c <= '9'){ 14 p[cnt++] = (int)(c - '0'); 15 } 16 } 17 scanf("%s",leaf); 18 scanf("%d",&m); 19 printf("S-Tree #%d:\n",++Case); 20 while(m--){ 21 scanf("%s",x); 22 int val,l = 1,r = 1 << n,leg = 1 << n; 23 for(int i = 0; i < cnt; ++i){ 24 val = (int)(x[p[i] - 1] - '0'); 25 if(val){ 26 l += leg >> 1; 27 leg >>= 1; 28 } 29 else{ 30 r -= leg >> 1; 31 leg >>= 1; 32 } 33 } 34 printf("%c",leaf[l - 1]); 35 } 36 printf("\n\n"); 37 } 38 return 0; 39 }