牛客 CQOI2010 撲克牌(二分答案 驗證)

2021-10-09 09:46:17 字數 1431 閱讀 7171

題目鏈結

你有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不高興了,他想了想,決定大 小...