第九屆藍橋杯5 7題

2021-10-10 12:12:32 字數 2841 閱讀 2067

/*

description

以下**可以從陣列a中找出第k小的元素。

它使用了類似快速排序中的分治演算法,期望時間複雜度是o(n)的。

請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。

input

見上文描述。

output

注意:只填寫劃線部分缺少的**,不要抄寫已經存在的**或符號。

*///注意:題目要求的是時間複雜度是要o(n)的時間複雜度,所以執行結果正確的話答案也不一定正確。做此題時需要了解快速排序與分冶演算法

#include

intquick_select

(int a,

int l,

int r,

int k)

int i = l, j = r;

while

(i < j)

while

(i < j && a[j]

> x) j--;if

(i < j)

} a[i]

= x;

p = i;

if(i - l +

1== k)

return a[i];if

(i - l +

1< k)

return

quick_select

( a, i+

1, r, k-

(i-l+1)

);//填空

else

return

quick_select

(a, l, i -

1, k);}

intmain()

;printf

("%d\n"

,quick_select

(a,0,14

,5))

;return0;

}

description

給定三個整數陣列

a = [a1, a2, … an],

b = [b1, b2, … bn],

c = [c1, c2, … cn],

請你統計有多少個三元組(i, j, k) 滿足:

1 <= i, j, k <= n

ai < bj < ck

input

第一行包含乙個整數n。

第二行包含n個整數a1, a2, … an。

第三行包含n個整數b1, b2, … bn。

第四行包含n個整數c1, c2, … cn。

對於30%的資料,1 <= n <= 100

對於60%的資料,1 <= n <= 1000

對於100%的資料,1 <= n <= 100000 0 <= ai, bi, ci <= 100000

output

乙個整數表示答案。

sample input 1

31 1 1

2 2 2

3 3 3

sample output 127/

/思路:首先從 1 <= n <= 100000 知道,這道題最多只能有單層迴圈,我們利用函式 sort 分別將a,b,c陣列排序 ,再遍歷一遍b陣列,

求出比在a中比b中乙個元素小的元素個數m,再求出c中b中乙個元素大的元素個數n,mn便是b中該數可以構成的 所有組合,再將所有組合求和即為最終答案/

//sort函式用於c++中,對給定區間所有元素進行排序,預設為公升序,也可進行降序排序。sort函式進行排序的時間複雜度為n*log2n,比冒泡之類的排序演算法效率要高,sort函式包含在標頭檔案為#include的c++標準庫中

#include

#include

using

namespace std;

intmain()

cout

}

/*

description

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。

對於整點(x, y),我們定義它到原點的距離dis(x, y)是從原點到(x, y)的螺旋折線段的長度。

例如dis(0, 1)=3, dis(-2, -1)=9

給出整點座標(x, y),你能計算出dis(x, y)嗎?

x和y對於40%的資料,-1000 <= x, y <= 1000

對於70%的資料,-100000 <= x, y <= 100000

對於100%的資料, -1000000000 <= x, y <= 1000000000

output

輸出dis(x, y)

sample input 1

0 1sample output 1

3*///思路:根據其對測試資料的大小範圍,此題的複雜度只能為 o(1) ,所以推測不能有迴圈出現,以及利用該圖的對角線來觀察,會發現所求點路徑大小與距離最近對角線上的點之間的關係,所以分四種情況來說明即可

#include

#include

using

namespace std;

intmain()

else

if(x>0&&

abs(y)

<=x)

else

if(x<0&&

-x>=y)

else

if(y<0&&

-y>=x)

sum=(2

*cnn+cnn*

(cnn-1)

*2)+

(4*cnn+cnn*

(cnn-1)

*2);

cout<}

結語

藍橋杯第九屆決賽

x星球的鈔票的面額只有 100元,5元,2元,1元,共4種。小明去x星旅遊,他手裡只有2張100元的x星幣,太不方便,恰好路過x星銀行就去換零錢。小明有點強迫症,他堅持要求200元換出的零鈔中2元的張數剛好是1元的張數的10倍,剩下的當然都是5元面額的。銀行的工作人員有點為難,你能幫助算出 在滿足小...

第九屆藍橋杯C組 一二題

小明被不明勢力劫持。後被扔到x星站再無問津。小明得知每天都有飛船飛往地球,但需要108元的船票,而他卻身無分文。他決定在x星戰打工。好心的老闆答應包食宿,第1天給他1元錢。並且,以後的每一天都比前一天多2元錢,直到他有足夠的錢買票。請計算一下,小明在第幾天就能湊夠108元,返回地球。public c...

第九屆藍橋杯 螺旋折線

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入格式 x和y 對於40 的資料,1000 x,...