uva712_S树
来源:互联网 发布:电脑图标全变成windows 编辑:程序博客网 时间:2024/05/22 09:42
///////////////////////////////////////////////////////////////////////////////////////////////////////
作者:tt2767
声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0
查看本文更新与讨论请点击:http://blog.csdn.net/tt2767
链接被删请百度: CSDN tt2767
///////////////////////////////////////////////////////////////////////////////////////////////////////
题解:
把查询的值看成二进制,转换成十进制之后去叶子里面找对应的值输出即可
#include<cstdio>#include<cstring>#include<iostream>const int N = 100009;int change(char * s);//pow调用库中的也可,由于可能存在的精度问题,重写了一下int pow(int x, int y);void rev(char * x);int main(){ int n, m, tot = 1; while(scanf("%d", &n) == 1 && n) { getchar(); int p = 0 ; char s[N], ans[N], x[N]; gets(s); gets(s); scanf("%d", &m); getchar(); while(m--) { gets(x); ans[p++] = s[change(x)]; } ans[p] = '\0'; printf("S-Tree #%d:\n", tot++); puts(ans); puts(""); } return 0;}int change(char * s){ rev(s); int l = strlen(s); int ans = 0, p = 0; for(int i = 0 ; i < l ; i++) ans+= (s[i]-'0') * pow(2,i); return ans;}int pow(int x, int y){ int ans = 1; while(y--) { ans *= x; } return ans;}void rev(char * x){ int right = strlen(x)-1; int left = 0; char temp; while(left < right) { temp = x[left]; x[left++] = x[right]; x[right--] = temp; }}
0 0