题解
易得,最后一轮只发给Arkady一人糖时,他获得的糖数最多。观察发现\(D\)的数据范围非常小,因此可以枚举发糖的轮数。设发糖的轮数为\(i\),每次每人发\(x\)颗糖,可列方程:
\[(i-1)k\cdot x+x=n \]化简后得:
\[x=\frac{n} {(i-1)k+1} \]但是其中\((i-1)\cdot k\)会爆long long,而\(i\cdot k>n\)时\(x=0\),对答案没有贡献,因此特判\(k>n\div 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;
}