CF965C Solution

题目链接

题解

易得,最后一轮只发给Arkady一人糖时,他获得的糖数最多。观察发现(D)的数据范围非常小,因此可以枚举发糖的轮数。设发糖的轮数为(i),每次每人发(x)颗糖,可列方程:

[(i-1)kcdot x+x=n ]

化简后得:

[x=frac{n} {(i-1)k+1} ]

但是其中((i-1)cdot k)会爆long long,而(icdot k>n)(x=0),对答案没有贡献,因此特判(k>ndiv i)时跳过。

AC代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	int n,k,m,d,ans=0;
	scanf("%lld%lld%lld%lld",&n,&k,&m,&d);
	for(int i=1;i<=d;i++) 
	{
		if(k>n/i) continue;
		ans=max(ans,min(n/((i-1)*k+1),m)*i); 
	}
	printf("%lld",ans);
	return 0;
}	
原文地址:https://www.cnblogs.com/violetholmes/p/14227271.html