1105 S-Trees

問題概要

二分木が与えられる。キーの値が与えられるとき、葉のノードの値を出力せよ。

解法

問題文読解が面倒だが、やることは単に与えられた二分木を辿って葉の値を出力するだけ。
深さjのノードが1の場合、葉の位置は2^(n-j-1)ずれる。

ソースコード

int n,m; char bin[1000],in[9];

int main()
{
	int cs=0;
	while(scanf("%d",&n),n)
	{
		rep(i,n)scanf("%s",in);
		scanf("%s%d",bin,&m);
		printf("S-Tree #%d:\n",++cs);
		rep(i,m)
		{
			int p=0;
			scanf("%s",in);
			rep(j,n)p+=in[j]=='1'?1<<n-j-1:0;
			putchar(bin[p]);
		}
		puts("\n");
	}
	return 0;
}