@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
相加,即為總的烘乾機時間sum
check
函式的判定條件方式為:若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 到...