生日禮物(我的思維崩盤題 )

2022-07-30 19:06:13 字數 2291 閱讀 4870

個人心得:做完這題發現自己有多水,先是思路崩盤,後面借鑑思路之後再試,程式設計崩盤。好吧,全程崩盤,我要很無奈。

總的來說,還是自己思維的不嚴謹性和不會更好的模擬和運用學過的知識,還是有待進步!

好吧先看這道令我奔潰的題吧,可能是我太水了!!!

小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標(即位置)。某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。 小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物彩帶足夠漂亮,小西希望這一段彩帶中能包含所有種類的彩珠。同時,為了方便,小西希望這段彩帶盡可能短,你能幫助小西計算這個最短的長度麼?彩帶的長度即為彩帶開始位置到結束位置的位置差。input第一行包含兩個整數n, k,分別表示彩珠的總數以及種類數。接下來k行,每行第乙個數為ti,表示第i種彩珠的數目。接下來按公升序給出ti個非負整數,為這ti個彩珠分別出現的位置。output應包含一行,為最短彩帶長度。sample input

6 3

1 52 1 7

3 1 3 8

sample output

3
hint

有多種方案可選,其中比較短的是1~5和5~8。後者長度為3最短。

【資料規模】

對於50%的資料, n≤10000;

對於80%的資料, n≤800000;

對於100%的資料,1≤n≤1000000,1≤k≤60,0≤彩珠位置<2^31。

【分析】:

這道題用貪心的思想。貪心的方法為:對於每種顏色的彩珠,從編號小的地方往後推進,用陣列where[x]記錄x顏色的珠子已經推進到了哪個地方。首先,在所有顏色當前推進制置中,選出位置編號的最大值max1和最小值min1,很容易想到當前符合題意的長度就是max1-min1《如圖一》,這一步是計算。

然後嘗試將某個滿足下面條件的顏色的where向後推一位:這一顏色的當前推進制置是所有顏色中最小的,且它的後面那一位最小,這一步是轉移《如圖二》。

現在來計算迴圈次數:有n個珠子,k種顏色,轉移需轉移n-k次,計算需計算n-k+1次《多的「1」是在初始位置時需要進行一次計算》,因此迴圈次數為n-k+1。這道題貪心之處就在於每次轉移最小值,這樣保證情況最優且考慮全面。

【時間複雜度分析】:

迴圈次數***移+計算):o((n-k+1)*2*k)=o(n*k)

個人心得:挺不錯的思想,可是實施起來比較麻煩,每次選最小的,後面看到其他的大神用了優先佇列發現挺完美,不過終止條件和結構體的建立要思考,結構體必須包括他所屬的顏色和在的位置,答案的**是直接建立最大資料的結構體陣列,乙個顏色標誌,乙個儲存位置,還有個就是儲存下乙個同等顏色的位置,

我發現bzoj的水題都比較高檔昂。這道題的基本思想是,每次用優先佇列把位置最靠前的顏色彈出來,並把與它顏色相同的下乙個點的位置進佇列,每次更新最優長度。

2.將每個顏色的第乙個點入佇列,算第乙個狀態。

3.每次將佇列最前端的顏色彈出,將他的下乙個點放入佇列,更新最優長度。

1 #include2 #include

3 #include4 #include5 #include6 #include7

#define maxn 1000010

8#define inf (1<<30)

9using

namespace

std;

10int t[61],s[61

];11

struct

node;

16void init(int x,int y,int

z)21 friend bool

operator

24}x[maxn];

25 priority_queueq;

26int

main()38}

39for(int i=0;i)

43int ans=r-q.top().second;

44while(1)51

else

break

;52 tmp=q.top();

53 ans=min(r-tmp.second,ans);54}

55 printf("%d"

,ans);

56return0;

57 }

程式設計題 京東 生日禮物

題目描述 bf的生日快到了,這一次,小東決定為bf送乙份特別的生日禮物為其慶生。作為高智商中的佼佼者,bf在國外求學,因此小東無法與之一起慶生。小東計畫送乙個生日卡片,並通過特別的包裝讓bf永遠難忘。她決定把卡片套裝在一系列的信封a 中。小東已經從商店中購買了很多的信封,她希望能夠用手頭中盡可能多的...

薩布的生日禮物

薩布的生日禮物 time limit 1 second memory limit 65536 kb 薩布剛剛度過了他的三歲生日,收到了很多禮物。儘管薩布只有三歲,但他和他的父親約翰一樣喜歡整潔。因此薩布已經開始整理這些禮物了。薩布共收到了 n 份禮物,且第 i 件禮物的標號是 i。他想把這 n 件禮...

2020 09 10 送給自己的生日禮物

15 00 你遇到過乙個非比尋常的老師嗎?他堅持不懈地教你那些你不理解的東西,他知道,那些最難的課程用一生的時間來學習。相約星期二 遇到問題最難受的不是問題本身,而是問題引起自己一連串的情緒反應。為什麼會這樣?為什麼突然會發生這種情況?難道是我 做得不夠好嗎?還是因為其他一些人做得還不到位?從自責到...