鑽石&王者
先從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個物...