牛客程式設計巔峰賽S1第3場 青銅 白銀

2021-10-08 04:54:47 字數 1928 閱讀 5364

@time:2020/7/16 21:00-22:00

@host:牛客網

牛客網題目傳送門

求所有長度為n的數中,各個上的數字之和為m的這些數的

題目雖然簡短,還是得認真讀兩遍。

首先要表示長度為n的所有數,這裡用乙個[ pow(10,n-1),pow(10,n) )就可以表示範圍了。

然後就是要求乙個數的位數之和,這裡我寫了乙個sum1函式來求,想必大家都會(0.0)

然後暴力解法,直接遍歷範圍內的所有數,符合的話就加上,最後輸出。

class

solution

return da;

}//暴力求解

long

long

sum(

int n,

int m)

return cnt;}}

;

這道題大體與poj3104類似,傳送門

n件帶水的衣服,在陣列vector& a給出了每件衣服帶的水份,定義了兩種乾燥衣服的方式。

自然烘乾:每分鐘衣服自然烘乾1滴水

烘乾機:每分鐘可以烘乾k滴水,但烘乾機每次只能放一件衣服,並且烘乾機工作的時候,其他衣服仍然可以進行自然烘乾。

最終要求最少需要多少時間(分鐘為單位)把衣服全部烘乾。

暴力解法易超時,利用二分法進行判斷。

k=1時,特判,即每分鐘最多烘乾1滴水,找出最大值、

k>1時,首先,對vector進行排序,得到最大元素,找出水份最多的衣服;然後利用二分法的思想,構造了乙個check函式來與中值進行比較,不斷縮小範圍,直至得到結果。

check函式中,x用於查詢最短時間,假設在x的時間內所有衣服一直在自然風乾,則如果出現a[i]>x,則說明有多餘的水份需要烘乾機來烘乾。

而對於每乙個a[i],一定存在乙個總時間m,使得a[i]=(m-n)+n*k,其中n即為需要烘乾機使用的次數,n=(a[i]-m)/(k-1),這裡由於n不滿一次要當做一次,因此用celi函式進行向上取整。將每乙個a[i]所需時間n相加,即為總的烘乾機時間sumcheck函式的判定條件方式為:若sum<=mid,說明mid時間滿足烘乾所有衣服,需要向下縮小範圍;若sum>mid,說明時間不夠,需要向上縮小範圍。

typedef

long

long ll;

bool

check

(ll x,

int n,vector<

int>

& a,

int k)}if

(sum>x)

return0;

else

return1;

}int

solve

(int n, vector<

int>

& a,

int k)

else

l=mid+1;

}return ans;

}}

牛客程式設計巔峰賽S1第2場 青銅 白銀

牛牛現在有n張撲克牌,每張撲克牌都有點數和花色兩部分組成。點數為 1 9 的正整數,花色為 c d h s 其中的乙個,分別表示梅花 方塊 紅桃 黑桃。現在牛牛想按一定的順序把這n張牌扔掉。扔牌順序的規則如下1.1.如果現在還剩素數張牌,則將牌頂的牌扔掉 2.如果現在還剩非素數張牌,則將牌底的牌扔掉...

牛客程式設計巔峰賽S1第12場

題目描述 給你乙個含有n個元素的陣列arr i 請你告訴牛牛這個陣列的中位數大還是平均數大,如果中位數更大輸出1,如果平均數更大輸出 1,如果中位數和平均數相等輸出0 示例1輸入 1,3,4 輸出說明 中位數3,平均數約等於2.67,所以輸出1 示例2輸入 7,4,8,11 輸出說明 中位數7.5,...

牛客程式設計巔峰賽S1第3場 黃金 鑽石 題解

問給定的 n 1 個數中,哪個數出現了兩次。簽到,直接做。class solution return ans 在一顆有 n 個結點且以 1 為根節點樹上,起初每個結點的初始權值為 0 現在有 q 次操作,每次操作選擇將以 r i 為根節點的子樹上的所有結點權值增加 x i 求 q 次操作後從 1 到...