UVA839

這道題又是一道遞歸的題目

先貼上代碼

//這種沒有明確說個數的動態分配還是得用new
#include<cstdio>
#include<iostream>
using namespace std;
struct mobile
{int WL,DL,WR,DR;mobile *left,*right;mobile(mobile *a=NULL,mobile*b=NULL):left(a),right(b){}
};
mobile *top =NULL;
int kase;mobile* read_input()
{mobile *u = new mobile;scanf("%d%d%d%d",&u->WL,&u->DL,&u->WR,&u->DR);
//printf("%d %d %d %d \n",u->WL,u->DL,u->WR,u->DR);if(u->WL == 0){u->left = read_input();}if(u->WR == 0){u->right = read_input();}return u;
}
void clear(mobile* u)
{if(u){clear(u->left);clear(u->right);delete u;}
}//又是一個遞歸
void compute(mobile* u,int &W,bool &flag)
{//實際上這里應該有一個專門處理子節點的語句來結束遞歸,但是這個語句與下面的合并的語句可以和在一起判斷。if(u->WL&&u->WR){W = u->WL + u->WR;if(u->DL*u->WL==u->DR*u->WR){flag = true;}elseflag = false;return;}bool left_flag = 1;bool right_flag = 1;if((u->left) && (u->WL == 0))compute(u->left,u->WL,left_flag);if((u->right) && (u->WR == 0))compute(u->right,u->WR,right_flag);W = u->WL + u->WR;if(u->DL * u->WL == u->DR*u->WR&&left_flag&&right_flag){flag=true;}elseflag=false;return ;
}
void print_mobile(mobile *u)
{printf("\n");printf("%d %d %d %d \n",u->WL,u->DL,u->WR,u->DR);if(u->left)print_mobile(u->left);if(u->right)print_mobile(u->right);printf("\n");
}
int main()
{
#ifdef localfreopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endifscanf("%d",&kase);for(int i = 0;i < kase;i++){if(i)printf("\n");clear(top);top = read_input();
//print_mobile(top);bool flag ;int weight;compute(top,weight,flag);
//print_mobile(top);if(flag)printf("YES\n");elseprintf("NO\n");}return 0;
}

我的版本和劉汝佳版本有一點不一樣,劉汝佳是直接在輸入的時候就判斷完畢了,而我是輸入完之后又遍歷一遍才輸入完畢,在考場時傾向于后者,因為編程簡單

?

第二點是劉汝佳的bool數據結構是使用返回值來返回的,而我的是使用引用來修改的,這兩者在使用上沒有本質上的區別

?

第三點,在我寫的compute函數中,第一個部分處理葉節點的部分可以不要,因為可以后后面結合的部分合并起來,功能上是一樣的。

?

還是得細細品味這種遞歸的思想啊

轉載于:https://www.cnblogs.com/TorettoRui/p/10433064.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Thread.getContextClassLoader與Thread.getClassLoader()區別

在閱讀spring boot啟動時候的源碼中&#xff0c;發現獲取classLoader使用的是getContextClassLoader于是乎產生了疑問&#xff0c;這種獲取ClassLoader的方式與我們最常見的通過Class.getClassLoader二者有什么區別&#xff1f;都是在什么場景下使用呢&#xff1f; 首先來看看…

ssl 的jks 生成工具

https://www.myssl.cn/tools/merge-jks-cert.html 通過key 私鑰 &#xff0c;和公鑰pem 生成jks 轉載于:https://www.cnblogs.com/vana/p/9594298.html

NOIP模擬賽10 題解

t3&#xff1a; 題意 給你一棵樹&#xff0c;然后每次兩種操作&#xff1a;1.給一個節點染色 &#xff1b; 2. 查詢一個節點與任意已染色節點 lca 的權值的最大值 分析 考慮一個節點被染色后的影響&#xff1a;令它的所有祖先節點&#xff08;包括自身&#xff09;的所有除去更…

洛谷 P1136 迎接儀式 解題報告

P1136 迎接儀式 題目描述 LHX教主要來X市指導OI學習工作了。為了迎接教主&#xff0c;在一條道路旁&#xff0c;一群Orz教主er穿著文化衫站在道路兩旁迎接教主&#xff0c;每件文化衫上都印著大字。一旁的Orzer依次擺出“歡迎歡迎歡迎歡迎……”的大字&#xff0c;但是領隊突然…

spring源碼分析-core.io包里面的類

前些日子看《深入理解javaweb開發》時&#xff0c;看到第一章java的io流&#xff0c;發覺自己對io流真的不是很熟悉。然后看了下JDK1.7中io包的一點點代碼&#xff0c;又看了org.springframework.core.io包的一些類和組織方式&#xff0c;當作是學習吧。總結一下。 先掛下spri…

對類Vue的MVVM前端庫的實現

關于實現MVVM&#xff0c;網上實在是太多了&#xff0c;本文為個人總結&#xff0c;結合源碼以及一些別人的實現 關于雙向綁定 vue 數據劫持 訂閱 - 發布ng 臟值檢查backbone.js 訂閱-發布(這個沒有使用過&#xff0c;并不是主流的用法)雙向綁定&#xff0c;從最基本的實現來說…

java.util.prefs.Preferences

我們經常需要將我們的程序中的設定&#xff0c;如窗口位置&#xff0c;開啟過的文件&#xff0c;用戶的選項設定等數據記錄下來&#xff0c;以做便用戶下一次開啟程序能繼續使用這些數據。 以前我們通常的做法是使用Properties類&#xff0c;它提供以下方法: void load(InputS…

django的母板系統

一.母板渲染語法 1.變量 {{ 變量 }} 2.邏輯 {% 邏輯語 %} 二.變量 在母板中有變量時,母板引擎會去反向解析找到這個傳來的變量,然后替換掉. .(點),在母板中是深度查詢據點符,它的查詢順序: 字典 > 屬性或方法 > 數字索引 三.過濾器 1.語法 {{ value|filter_name:參數}} 2…

python學習總結----時間模塊 and 虛擬環境(了解)

python學習總結----時間模塊 and 虛擬環境&#xff08;了解&#xff09; time- sleep&#xff1a;休眠指定的秒數(可以是小數) - time&#xff1a;獲取時間戳# 獲取時間戳(從1970-01-01 00:00:00到此刻的秒數)t time.time()print(t) - localtime&#xff1a;將時間戳轉換為對象…

【CSS】flex的常用布局

1、垂直居中&#xff0c;寫在父級上div{display: flex;justify-content: center;align-items: center; } 2、flex-左右兩端&#xff0c;垂直居中該布局在移動端較為常見<style> .wrap{display: flex;justify-content: space-between;align-items: center;width: 200px;he…

java.util.Properties

ava.util.Properties是對properties這類配置文件的映射。支持key-value類型和xml類型兩種 首先&#xff0c;新建一個文件&#xff0c;如圖&#xff1a; 然后再Java代碼段輸入如下代碼&#xff1a; import java.io.FileInputStream; import java.io.InputStream; import java…

Xpath使用方法

Xpath使用方法 注&#xff1a;默認死格式 先寫 //* 代表定位頁面下所有元素 1、Xpath支持ID、Class、Name定位功能 通過ID定位 //*[idkw]通過Class定位//*[classclass_name]通過Name定位//*[namename]-----------------------------------------------------------------------…

為什么這么多爛代碼?

在國內&#xff0c;有經驗的程序員都當領導了&#xff0c;領導又不寫代碼&#xff0c;那代碼只能讓剛入行的新手寫了&#xff0c;然后就是隨意堆砌&#xff0c;完成功能就行&#xff0c;所以目前我盡量不寫爛代碼&#xff0c;并盡量堅持改造已有的爛代碼&#xff0c;在我眼中&a…

Spring-boot 打成jar包后使用外部配置文件

官網說明 第一種是在jar包的同一目錄下建一個config文件夾&#xff0c;然后把配置文件放到這個文件夾下&#xff1b; 第二種是直接把配置文件放到jar包的同級目錄&#xff1b; 第三種在classpath下建一個config文件夾&#xff0c;然后把配置文件放進去&#xff1b; 第四種是在c…

acm模板生成

為迎接&#xff0c;接下來的區域賽&#xff0c;要做好準備(雖然不是特別有信心&#xff0c;但是還是要鼓勵自己&#xff0c;可以取得收獲的&#xff0c;加油) acm_latex模板&#xff1a; https://www.cnblogs.com/palayutm/p/6444833.html#e69bb4e696b0_1 windows下安裝texlive…

UI自動化之元素定位(xpath、css)

很早之前就已經寫過自動化了&#xff0c;不過點著功能久了就會容易忘記元素定位&#xff0c;尤其是xpath和css定位&#xff0c;所以就花點時間做下總結收集。 xpath有兩種定位&#xff1a; 一.絕對路徑&#xff08;不推薦使用&#xff0c;除非已經使用了所有方式仍然無法定位&a…

屬性編輯器PropertyEditor

在Spring配置文件里&#xff0c;我們往往通過字面值為Bean各種類型的屬性提供設置值&#xff1a;不管是double類型還是int類型&#xff0c;在配置文件中都對應字符串類型的字面值。BeanWrapper填充Bean屬性時如何將這個字面值轉換為對應的double或int等內部類型呢&#xff1f;我…

郵箱驗證

public class Emailstandard { /* * 以數字或字母開頭 * 之前可以含有數字,字母,下劃線,點 * 有且只有一個 * 之后只能含有數字,字母 * 必須以.com或者.cn結尾 * */ public static void main(String[] args) { Scanner sca new Scanner(…

python第二十八課——編碼小常識

2.內存和硬盤&#xff1a;內存&#xff1a;計算機硬件組成部分之一&#xff0c;它是一個容器&#xff0c;用來存儲數據&#xff1b;處理數據速度快&#xff0c;存儲數據量小&#xff1b;斷電死機數據會丟失&#xff0c;短暫性存儲數據硬盤&#xff1a;計算機硬件組成部分之一&a…

Javadoc 使用詳解

很多程序對Javadoc都不重視&#xff0c;認識不到Javadoc的作用&#xff0c;很多人都是這樣認為的&#xff1a;“我只要寫好功能就夠了&#xff0c;寫Javadoc太浪費時間&#xff0c;也沒啥作用&#xff0c;還不如用寫Javadoc的時間再多些個功能呢&#xff01;”&#xff0c;我們…