BZOJ 1816 撲克牌 二分

2022-05-26 23:51:09 字數 1562 閱讀 8539

由於答案具有單調性,考慮二分答案並驗證。

如果能湊齊x堆,因為每個joke在乙個牌堆裡最多只能用一次,則至多只能用min(x,m)個joke.

對於每個牌,如果這個牌的總數小於x,用joke補齊剩下的,如果能補齊那麼一定能組成x堆。

簡單證明: 補齊完後的牌堆裡每用joke乙個,一定能在其他牌裡面湊齊n-1個不是joke的牌。

考慮反證法,如果取某乙個joke後,剩下的牌組有乙個只剩下joke的話。這是不可能的,因為joke總數至多為x。

# include # include 

# include

# include

# include

# include

# include

# include

# include

# include

# include

using

namespace

std;

# define lowbit(x) ((x)&(-x))

# define pi

3.1415926535

# define eps 1e-9

# define mod

9999973

# define inf

1000000000

# define mem(a,b) memset(a,b,

sizeof

(a))

# define for(i,a,n)

for(int i=a; i<=n; ++i)

# define fo(i,a,n)

for(int i=a; ii)

# define bug puts("h

");# define lch p

<<1

,l,mid

# define rch p

<<1|1,mid+1

,r# define mp make_pair

# define pb push_back

typedef pair

pii;

typedef vector

vi;# pragma comment(linker,

"/stack:1024000000,1024000000")

typedef

long

long

ll;int

scan()

void out(int

a)

if(a>=10) out(a/10

); putchar(a%10+'0'

);}const

int n=55;//

code begin...

inta[n], n, m;

bool check(int

x)

return res<=min(m,x);

}int

main ()

printf(

"%d\n

",l);

return0;

}

view code

撲克牌(二分)

題目描述 你有n種牌,第i種牌的數目為ci。另外有一種特殊的牌 joker,它的數目是m。你可以用每種牌各一張來組成一套牌,也可以用一張joker和除了某一種牌以外的其他牌各一張組成1套牌。比如,當n 3時,一共有4種合法的套牌 給出n,m和ci,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套...

程式設計習題之撲克牌二分

你有n種牌,第i種牌的數目為ci。另外有一種特殊的牌 joker,它的數目是m。你可以用每種牌各一張來組成一套牌,也可以用一張joker和除了某一種牌以外的其他牌各一張組成1套牌。比如,當n 3時,一共有4種合法的套牌 給出n,m和ci,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套牌裡 可以...

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

題目鏈結 你有n種牌,第i種牌的數目為ci。另外有一種特殊的牌 joker,它的數目是m。你可以用每種牌各一張來組成一套牌,也可以用一張joker和除了某一種牌以外的其他牌各一張組成1套牌。比如,當n 3時,一共有4種合法的套牌 給出n,m和ci,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套...