题解 CF1359A 【Berland Poker】

题意

给出 \(n,m,k\) ,表示 \(k\) 名玩家打牌,共 \(n\) 张牌,\(m\) 张王,保证 \(k|n\) ,记得分为 拿到最多王的玩家手中王数 \(-\)拿到第二多王的玩家手中的王数,求得分最大值

思路

首先,每人有 \(n/k\) 张牌,

假设有玩家手气特好,抽一张一个王,那他最多有 \(maxn=\max\{m,n/k\}\) 张牌,

在此情形下,还剩 \(m-maxn\) 张王,则拿到第二多王数应该为 \(\left\lceil\dfrac{m-maxn}{k-1}\right\rceil\)

于是,两者相减,这题就没了。

代码

#include
#define re read()
using namespace std;
const int MAXN=1e5;
int read(){
	#define ge getchar()
	int x=0,sgn=1;char ch=ge;
	for(;!isdigit(ch);ch=ge)if(ch=='-')sgn=-1;
	for(;isdigit(ch);ch=ge)x=(x<<1)+(x<<3)+(ch^48);
	return x*sgn;
}
int n,m,k,T;
int main (){
	T=re;
	while(T--){
		n=re;m=re;k=re;
		int maxn=min(n/k,m),minn=max(0,(m-maxn+k-2)/(k-1));
		printf("%d\n",maxn-minn);
	}
	return 0;
}

你可能感兴趣的:(题解 CF1359A 【Berland Poker】)