題目鏈結
你有n種牌,第i種牌的數目為ci。另外有一種特殊的牌:joker,它的數目是m。你可以用每種牌各一張來組成一套牌,也可以用一張joker和除了某一種牌以外的其他牌各一張組成1套牌。比如,當n=3時,一共有4種合法的套牌:, , , 。 給出n, m和ci,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套牌裡(可以有牌不使用)。
輸入描述:
第一行包含兩個整數n, m,即牌的種數和joker的個數。
第二行包含n個整數ci,即每種牌的張數。
輸出描述:
輸出僅乙個整數,即最多組成的套牌數目。
示例1輸入
3 41 2 3
輸出說明
樣例解釋
輸入資料表明:一共有1個1,2個2,3個3,4個joker。最多可以組成三副套牌:, , ,joker還剩乙個,其餘牌全部用完。
備註:資料範圍
50%的資料滿足:2≤n
≤5,0
≤m≤1
06,0
≤ci≤
2002 \le n \le 5, 0 \le m \le 10^6, 0 \le c_i \le 200
2≤n≤5,
0≤m≤
106,
0≤ci
≤20
0100%的資料滿足:2≤n
≤50,0
≤m,c
i≤
500000000
2 \le n \le 50, 0 \le m, c_i \le 500000000
2≤n≤50
,0≤m
,ci
≤500
0000
00。二分答案,然後驗證。假設要分成 x
xx 套牌,那麼第 i
ii 種牌就不能使用超過 x
xx 張(如果牌數多於 x
xx 張),因為不能重複,每套牌有 n
nn 種不同的牌,然後把這 n
nn 種牌都分到 x
xx 套牌中後,不夠的肯定要用 joker 牌補上,但是 joker 牌也不能重複,那麼極限情況就是 joker 牌最多有 x
xx 張。那麼我們沒次二分到的套數 x
xx 就可以用補上的 joker 牌的數量進行判斷是否可行。
#include
using
namespace std;
typedef
long
long ll;
ll n, m;
// n種牌
ll c[55]
;// 每種牌c[i]張
bool
check
(int x)
// 組成x套牌,每套n種不同的牌
intmain()
cout << r << endl;
return0;
}
撲克牌(二分)
題目描述 你有n種牌,第i種牌的數目為ci。另外有一種特殊的牌 joker,它的數目是m。你可以用每種牌各一張來組成一套牌,也可以用一張joker和除了某一種牌以外的其他牌各一張組成1套牌。比如,當n 3時,一共有4種合法的套牌 給出n,m和ci,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套...
牛客之撲克牌順子
題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,...
牛客網 撲克牌順子
ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...