牛客程式設計巔峰賽S2第2場

2021-10-12 22:07:26 字數 2018 閱讀 1804

鑽石&王者

先從kk

k塊糖果中拿出n

nn塊糖果平均分給n

nn個朋友,剩下的糖果再和牛牛一起平分,答案:k−n

n+

1\frac

n+1k−n

​.三個木棒的構不成三角形的邊界情況就是a+b

=c

a+b=c

a+b=

c,那麼對於總的木棒長度固定,只要滿足斐波那契數列即可。

這個題就是考察層次遍歷的時候結點編號的關係,我們可以令整棵樹的根節點的編號是0,然後對於任意一顆子樹的根節點,都應該滿足roo

t∗k+

i<

nroot*k+iro

ot∗k

+i<

n(其中,n

nn是整棵樹的結點數,i∈[

1,k]

i \in [1,k]

i∈[1,k

])。

class

solution

}return ans;}}

;

這道題求解的是各個長度的子陣列中最高銷量的最小值。不斷列舉各個子區間,然後求解這個區間的最大值,這樣做的複雜度是o(n

3)

o(n^3)

o(n3

),不可取。

我們先明確乙個規律,對於乙個數x

xx來說,如果我們能找到第乙個比x

xx大的左右位置lma

x,rm

ax

lmax,rmax

lmax,r

max,那麼也就是意味著我們能找到長度為[1,

rmax

−lma

x−1]

[1,rmax-lmax-1]

[1,rma

x−lm

ax−1

]中的各個長度子陣列,滿足x

xx是這個子陣列的最大值。

我們得出了以陣列中每個位置元素為最大值的最大陣列長度,排個序,則在相同長度的陣列下,鍵值小的元素就是答案。

現在的問題就是求解如何找到lma

x,rm

ax

lmax,rmax

lmax,r

max,我們可以用單調棧的方式來在o(n

)o(n)

o(n)

的時間內求解出來。

const

int maxn=

1e5+

100;

int lmax[maxn]

,rmax[maxn]

;struct node

bool

operator

<

(const node a)

const

}node[maxn]

;class

solution

s.push

(i);}}

while

(!s.

empty()

)for

(int i=size-

1;i>=0;

--i)

s.push

(i);}}

while

(!s.

empty()

)for

(int i=

0;i++i) node[i]

.init

(n[i]

,rmax[i]

-lmax[i]+1

);sort

(node,node+size)

;int loc=

0;vector<

int> ans;ans.

clear()

;for

(int i=

0;i++i)

while

(node[i]

.len>loc) ans.

push_back

(node[i]

.val)

,loc++

;return ans;}}

;

牛客程式設計巔峰賽S2第2場 題解

牛牛是個非常熱心的人,所以他有很多的朋友。這一天牛牛跟他的n個朋友一起出去玩,在出門前牛牛的媽媽給了牛牛k塊糖果,牛牛決定把這些糖果的一部分分享給他的朋友們。由於牛牛非常熱心,所以他希望他的每乙個朋友分到的糖果數量都比牛牛要多 嚴格意義的多,不能相等 牛牛想知道他最多能吃到多少糖果?如果平均分配,計...

牛客程式設計巔峰賽S2第4場

又沒中獎 題目描述 牛牛最近很喜歡擲硬幣,由於他今天很無聊,所以他在家擲了n次硬幣,如果這n次硬幣全部朝上或者全部朝下牛牛就很開心,請問牛牛開心的概率是多少。每次擲硬幣朝上的概率與朝下的概率相同 示例1輸入複製1 返回值複製 1.00 說明概率為1,四捨五入保留兩位小數的字串為 1.00 示例2輸入...

牛客程式設計巔峰賽S2第8場

牛牛想把乙個數拆成兩個不相等的正整數之和,他想知道一共有多少種拆法,只不過他不知道該如何解決這個問題,所以他想請你幫忙。給定乙個數n,返回將這個數n拆成兩個不相等的正整數之和一共有多少種拆法。注 3 1 2和3 2 1視為同一種拆法 輸入返回值class solution 題目描述牛牛有現在有n個物...