暑期集訓2期6

2021-10-23 22:10:16 字數 2203 閱讀 1914

如果二叉樹的左右子樹的結構是對稱的,即兩棵子樹皆為空,或者皆不空,則稱該二叉樹是對稱的。程式設計判斷給定的二叉樹是否對稱。

例:如下圖中的二叉樹t1是對稱的,t2是不對稱的。

二叉樹用順序結構給出,若讀到#則為空,二叉樹t1=abcde,t2=abcd#e,如果二叉樹是對稱的,輸出「yes」,反之輸出「no」。

可以根據題意發現他給你的肯定是完全二叉樹(包括#),那麼我們可以從第二個開始兩個兩個判斷,要都有或者都#

#include

using

namespace std;

string s;

intmain()

for(

int i=

1;isize()

;i+=2)

if(s[i]

=='#'

&&s[i+1]

!='#'

||s[i]

!='#'

&&s[i+1]

=='#'

) cout<<

"yes"

;return0;

}

題目大概意思就是給你中序遍and按層遍歷然後輸出先序

dbeac

abcde

模擬一下

先是找到a

變成 dbe

c然後找到 b

變成 d

e這樣找出了答案了

#include

using

namespace std;

int len;

char s[

15000

],s1[

15000];

inline

void

dfs(

int l,

int r)}}

cout<;根左右

dfs(l,mid-1)

;//左邊

dfs(mid+

1,r)

;//右邊

}int

main()

#include

using

namespace std;

int n,p,k;

int a[

150000

],vis[

150000];

inline

voidqx(

int x)

inline

voidzx(

int x)

inline

voidhx(

int x)

intmain()

if(p==1)

qx(1)

;//先序遍歷

else

if(p==2)

zx(1)

;//中序遍歷

elsehx(

1);//後序遍歷

return0;

}

樹形dp用dp[i][1/0]表示以i為根節點的樹i要不要選的最大價值,如果這個根要選,那麼遞迴兒子,如果要選,如果兒子代價》0那麼加上兒子,不選,看看兒子要不要選

#include

using

namespace std;

inline

intread()

while

(isdigit

(ch)

)return res*f;

}int n,f[

550000][

2],head[

550000

],tot,a[

17000];

struct node

edge[

550000];

inline

void

add(

int x,

int y)

inline

void

dfs(

int x,

int y)}}

intmain()

dfs(1,

0); cout<<

max(f[1]

[0],f[1]

[1])

;return0;

}

暑期集訓2期3

直接列舉 3000到3000也沒關係。列舉最後的x,容易發現x 的取值不會在序列取值之外。不開long long 會掛掉30分。題目大意兩排數,你的目標是將數值相同的放到一起。滾動不消耗代價。提起消耗的代價為數值。你需要最小化提起的數值限制,也就是移動的最大值盡可能小 30分演算法 一旦乙個數值使用...

暑期集訓2期5

小李是希望小學六年級的學生,在一次數學課上,張老師出了一道題,小李很快就答出來了。這個題目是這樣的 給定乙個正整數 n,請求出 2 n之間長度最長的 成等差數列的素數 質數 例如 當 n 的值為 40 時,在 2 40 之間的全部素數有 2 3 5 7 11 13 17 19 23 29 31 37...

暑期集訓2期4

把已經買過的遊戲給標記一下,然後從第一款遊戲開始買,如果還可以買並且沒有被標記過那麼買 include using namespace std long long n,ans,num,x struct node a 100010 inline intread while isdigit ch res...