题解 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<bits/stdc++.h>
#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;
}
本博客作者:Werner_Yin(https://www.cnblogs.com/werner-yin/) ,转载时请注明出处,谢谢支持!