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

2021-10-10 17:19:36 字數 1979 閱讀 1550

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

如果平均分配,計算牛牛和他的朋友最少都能獲得多少糖果num

n um

=k/(

n+1)

num=k/(n+1)

num=k/

(n+1

)(向下取整)

然後計算餘數是多少,mod

=kmod=k%(n+1)

mod=k

直接進行判斷:

如果mod==n,則可以將剩餘的糖果分給他的朋友一人一顆,這樣所有的朋友的糖果數量都大於牛牛的糖果數量

否則的話,就將牛牛的糖果數量-1,這樣所有朋友的糖果數量也大於牛牛的糖果數量

class

solution

};

牛牛有一根長度為a(3≤a≤1e18)的木棒,現在牛牛想將木棒分成一些段(每段木棒長度必須為整數),使得分隔後的木棍中,任意三段都不能構成三角形,牛牛想知道木棒最多被分成幾段呢?

如果要構成三邊能構成三角形的話需要滿足兩個條件:1.兩邊之和大於第三邊;2.兩邊之差小於第三邊

於是要是得任意三邊都不能構成三角形的話,則需要構造,可以直接從1開始往後推,不難發現有個規律:

當滿足這樣乙個序列:1、1、2、3、5…時,任意三邊都不能構成三角形,而這個序列恰好是斐波拉契數列

故:此題可解,直接求出在[0,1e18]區間中所有的斐波拉契數列值,儲存到乙個陣列中。

然後遍歷這個陣列,當當前遍歷的斐波拉契陣列的字首和大於輸入的值時,則證明找到了木棒能被分成的最大段數

直接按照題目要求就行,想複雜了。。。

n個結點的完全二叉樹,現在需要對每個結點與它的父節點計算異或值,並求和。

直接層次遍歷整棵樹即可。

比較明顯的單調棧題。

單調棧比較明顯的特徵求:滑動視窗中的最大值(最小值)或者是當前元素左邊(右邊)第乙個比他大(小) 的元素位置

這題可以維護乙個單調遞增棧(當前元素大於棧頂元素時,棧頂元素出棧;否則當前元素入棧)

用left,right分別儲存左邊和右邊第乙個比他小的數(左邊不能取等右邊可以取等,原因因為是求最大值嘛)

用ans記錄視窗長度為i時的結果

#define inf 0x3f3f3f3f

class

solution

while

(!sta.

empty()

) sta.

pop();

for(

int i=n-

1;i>=

0;i--

)

vector<

int>

ans(n,inf)

;for

(int i=

0;i)//遍歷滑動視窗大小

for(

int i=n-

2;i>=

0;i--

)return ans;}}

;

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

鑽石 王者 先從kk k塊糖果中拿出n nn塊糖果平均分給n nn個朋友,剩下的糖果再和牛牛一起平分,答案 k n n 1 frac n 1k n 三個木棒的構不成三角形的邊界情況就是a b c a b c a b c,那麼對於總的木棒長度固定,只要滿足斐波那契數列即可。這個題就是考察層次遍歷的時候...

牛客巔峰賽S2第6場題解

題目描述 給出乙個僅包含小寫字母的字串s,你最多可以操作k次,使得任意乙個小寫字母變為與其相鄰的小寫字母 ascii碼差值的絕對值為1 請你求出可能的最長相等子串行 即求這個字串修改至多k次後的的乙個最長子序列,且需要保證這個子串行中每個字母相等 子串行 從原字串中取任意多個字母按照先後順序構成的新...

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

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