• Uva712 S树


    Uva 712 S树

    题目描述:

    给出一棵满二叉树,每一层代表一个01变量,取0时往左走,取1时往右走。每层用一个变量(x_i)表示,那么这棵树可以等价于若干(x_i)之间的位运算,给出所有叶子节点的值以及一些查询((x_i)的值),求每个查询到达的叶子节点的值。

    题目链接:https://vjudge.net/problem/UVA-712

    思路:

    用到此前紫书的一个结论,即对一棵满二叉树编号,则节点k的左子节点和右子节点的编号分别为2k和2k+1。按照题目的输入格式,要确定每次查询的路径上,因为(x_1,x_2,...,x_i)出现的顺序不同,后面输入的查询路径就要相应地转换。这题我在输入上混着用getchar()cin,写得有些繁琐,其实直接把每行当作string读入就可以了。

    代码:
    #include <iostream>
    #include <memory.h>
    using namespace std;
    const int maxn = 7 + 2;
    int main()
    {
    	int n;int kase = 0;
    //	freopen("uva712_in.txt", "r", stdin);
    //	freopen("uva712_out.txt", "w", stdout);
    	while(cin >> n && n){
    		int s[maxn], next[maxn];
    		int depth = n;
    		s[0] = 0, next[0] = 0;
    		int i = 1;
    		++kase;
    		printf("S-Tree #%d:
    ", kase);
    		while(n--){
    			string str; cin >> str;
    			next[i] = next[i-1];
    			next[i-1] = str[1]-'0';
    			++i;
    		}
    		int terminal[1<<maxn];
    		memset(terminal, 0, sizeof(terminal));
    		char c; while((c=getchar()) == '
    ');
    		for(int i = 0; i < 1<<depth; ++i){
    			terminal[i] = c - '0';
    			c = getchar();	
    		}
    		
    		int m; cin >> m;
    		int path[maxn], p[maxn];
    		while(m--){
    			int i = 0; char c;
    			memset(path, 0, sizeof(path));
    			memset(p, 0, sizeof(p));
    			while((c = getchar()) == '
    ');
    			while(c != '
    '){
    				p[i] = c - '0';
    				++i;
    				c = getchar();
    			}
    			for(int i = 0; i < depth; ++i){
    				path[i] = p[next[i]-1];
    			}
    			int start = 1;
    			for(int i = 0; i < depth; ++i){
    				if(path[i]) start = start * 2 + 1;
    				else start = start * 2;
    			}
    			int end = start - (1 << depth);
    			cout << terminal[end];
    		}
    		cout << "
    " << "
    ";
    	}
    }
    
  • 相关阅读:
    防止SQL注入攻击的注意事项【转载】
    javascript小技巧之一【获取各种尺寸】
    Web.config中maxRequestLength后面数字的单位问题
    javascript小技巧之二【对象、元素、事件】
    我的博客
    初学测试用例
    初识我的博客
    自动生成小学四则运算题目
    【Yii】数据库读写方法:AR模型和DAO方法
    【阅读】看懂财经新闻的第一本书
  • 原文地址:https://www.cnblogs.com/patrolli/p/11291230.html
Copyright © 2020-2023  润新知