藍橋杯訓練1 搜尋專題真題(一道樹的直徑比較有趣)

2021-10-03 20:31:23 字數 2788 閱讀 9406

訓練題1:帶分數

#include

#include

using

namespace std;

intgetnum

(int a,

int begin,

int end)

intmain()

; cin >> n;

int temp = n, ans =0;

while

(temp)do}

}while

(next_permutation

(a, a +9)

);cout << ans;

return0;

}

訓練題2:剪格仔

#include

using

namespace std;

const

int maxn =12;

int n, m, a[maxn]

[maxn]

, vis[maxn]

[maxn]

, sum, ans;

int dir[4]

[2]=

,,,}

;void

dfs(

int x,

int y,

int cnt,

int blank)

for(

int i =

0; i <4;

++i)}}

}int

main()

if(sum &1)

cout <<0;

else

return0;

}

大臣的旅費

#define _crt_secure_no_warnings

#include

#include

#include

using

namespace std;

const

int maxn =

10005

;struct edge };

vector g[maxn]

;int n, ans, cnt, vis[maxn]

;int

dfs(

int p,

int len)

intmain()

for(

int i =

1; i <= n;

++i)

printf

("%d"

, ans *10+

(ans +1)

* ans /2)

;return0;

}

這題是求樹的直徑,那我們乾脆來講一講這個演算法:樹的直徑

首先解釋名詞:樹的直徑

因為樹是一種比較特殊的資料結構,樹上的任意兩個點都可以互聯通,並且聯通方式唯一!因為樹是乙個最大無環圖,最小聯通圖!那麼既然任意兩個點都可互聯通了,就肯定有兩個點之間的距離是所有的兩個點組成的點對的距離中最大的!求這個最大值就是求樹的直徑!

怎樣?樹的直徑是不是就是很符合這個題目的特徵啊?

然後說明演算法:dfs解樹的直徑

先說明乙個道理:

隨便從乙個點出發能夠到達的最遠的點,一定是樹的直徑的乙個端點!

為什麼呢?這個可以反證:假設選取任意點 p

因為樹的直徑的端點到 p 點也是有路徑的,假設端點為a和b,如果從 p 出發能夠到達的最遠的點不是a也不是b,而是c,那麼從a(或者b)出發,能夠到達的最遠的點也就不是b(或者a)了!這個大家可以在紙上畫一下,就可發現!

再詳細說演算法步驟:

第一次dfs:找到距離出發點p最遠的點a,它是直徑的乙個端點

第二次dfs:從直徑的端點出發,找到最遠的點,這個距離就是直徑!

這樣就從一開始的n次dfs到2次dfs,就能通過了!

#define _crt_secure_no_warnings

#include

#include

#include

using

namespace std;

const

int maxn =

10005

;struct edge };

vector g[maxn]

;int n, ans =-1

, maxpoint =-1

, vis[maxn]

;void

dfs(

int p,

int len)

vis[p]=1

;for

(int i =

0; i <

(int

)g[p]

.size()

;++i)if(

!vis[g[p]

[i].dest]

)dfs

(g[p]

[i].dest, len + g[p]

[i].cost)

;return;}

intmain()

dfs(1,

0); ans =-1

;memset

(vis,0,

sizeof

(vis));

dfs(maxpoint,0)

;printf

("%d"

, ans *10+

(ans +1)

* ans /2)

;return0;

}

藍橋杯真題訓練 2019 2題

2019第二題 小明用字母 a 對應數字 1,b 對應 2,以此類推,用 z 對應 26。對於 27 以上的數字,小明用兩位或更長位的字串來對應,例如 aa 對應 27,ab 對 應 28,az 對應 52,lq 對應 329。請問 2019 對應的字串是什麼?答案提交 這是一道結果填空的題,你只需...

藍橋杯真題 2020藍橋杯真題 跑步鍛鍊

小藍每天都鍛鍊身體。正常情況下,小藍每天跑 1 千公尺。如果某天是周一或者月初 1 日 為了激勵自己,小藍要跑 2 千公尺。如果同時是周一或月初,小藍也是跑 2 千公尺。小藍跑步已經堅持了很長時間,從 2000 年 1 月 1 日週六 含 到 2020 年10 月 1 日周四 含 請問這段時間小藍總...

備戰藍橋杯 2013真題(1)

大數學家高所有個好習慣 無論如何都要記日記。他的日記有個與眾不同的地方,他從不注朗年月日,而是用乙個整數代替,比如 4210 高斯出生於 1777年4月30日,在高斯發現的乙個重要定理的日記上標註著 5343,因此可算出那天是 1791年12月15日。高斯獲得博士學位的那天日記上標著 8113 請你...