zoukankan      html  css  js  c++  java
  • UVa 112

    题目:给你一个数和一棵树。问时钟是否存在根到叶子的路径使得路径上的数字和与已知数相等。

    分析:递归、栈。

    由于除了最外边的树外。其它都有两颗子树,直接递归求解就可以。

                假设存在一棵子树成立,即返回成立。注意叶子节点的另可子树为空。叶子直接返回结果。

    说明:注意数据中可能有负数。(POJ1145)

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    
    using namespace std;
    
    char input( void )
    {
    	char temp;
    	scanf("%c",&temp);
    	while ( temp == ' ' || temp == '
    ' )
    		scanf("%c",&temp);
    	return temp;
    }
    
    int deal( int v, int *leaf )
    {
    	int temp,value;
    	scanf("%d",&value);
    	temp = input();
    	int max = 0,l = 0,r = 0;
    	if ( temp == '(' ) {
    		if ( deal( v-value, &l ) ) max = 1;
    		temp = input();
    		if ( deal( v-value, &r ) ) max = 1;
    		temp = input();
    		if ( l && r ) max = (v==value);
    	}else *leaf = 1;
    	return max;
    }
    
    int main()
    {
    	int n,temp;
    	while ( ~scanf("%d",&n) ) {
    		input();
    		if ( deal( n, &temp ) )
    			printf("yes
    ");
    		else printf("no
    ");
    	}
    	return 0;
    }

    測试数据:

    -6 (3(-9()())())
    9 (5(4(3(2()())())())())

  • 相关阅读:
    长沙集训day6
    长沙集训day5(总结)
    长沙集训day4(总结)(爆零记)
    长沙集训day3(总结)(爆零记)
    长沙集训day2(总结)
    长沙集训day1(总结)
    p1324 dining(晚餐)
    p1156集合删数
    1034: [ZJOI2008]泡泡堂BNB
    清北学堂Day 6 游记
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7103163.html
Copyright © 2011-2022 走看看