由於答案具有單調性,考慮二分答案並驗證。
如果能湊齊x堆,因為每個joke在乙個牌堆裡最多只能用一次,則至多只能用min(x,m)個joke.
對於每個牌,如果這個牌的總數小於x,用joke補齊剩下的,如果能補齊那麼一定能組成x堆。
簡單證明: 補齊完後的牌堆裡每用joke乙個,一定能在其他牌裡面湊齊n-1個不是joke的牌。
考慮反證法,如果取某乙個joke後,剩下的牌組有乙個只剩下joke的話。這是不可能的,因為joke總數至多為x。
# include # includeview code# 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;
}
撲克牌(二分)
題目描述 你有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,你的任務是組成盡量多的套牌。每張牌最多只能用在一副套...