kk people want to split nn candies between them. Each candy should be given to exactly one of them or be thrown away.
The people are numbered from 11 to kk, and Arkady is the first of them. To split the candies, Arkady will choose an integer xx and then give the first xx candies to himself, the next xx candies to the second person, the next xx candies to the third person and so on in a cycle. The leftover (the remainder that is not divisible by xx) will be thrown away.
Arkady can't choose xx greater than MM as it is considered greedy. Also, he can't choose such a small xx that some person will receive candies more than DD times, as it is considered a slow splitting.
Please find what is the maximum number of candies Arkady can receive by choosing some valid xx.
The only line contains four integers nn, kk, MM and DD (2≤n≤10182≤n≤1018, 2≤k≤n2≤k≤n, 1≤M≤n1≤M≤n, 1≤D≤min(n,1000)1≤D≤min(n,1000), M⋅D⋅k≥nM⋅D⋅k≥n) — the number of candies, the number of people, the maximum number of candies given to a person at once, the maximum number of times a person can receive candies.
Print a single integer — the maximum possible number of candies Arkady can give to himself.
Note that it is always possible to choose some valid xx.
20 4 5 2
8
30 9 4 1
4
In the first example Arkady should choose x=4x=4. He will give 44 candies to himself, 44 candies to the second person, 44 candies to the third person, then 44 candies to the fourth person and then again 44 candies to himself. No person is given candies more than 22 times, and Arkady receives 88 candies in total.
Note that if Arkady chooses x=5x=5, he will receive only 55 candies, and if he chooses x=3x=3, he will receive only 3+3=63+3=6 candies as well as the second person, the third and the fourth persons will receive 33 candies, and 22 candies will be thrown away. He can't choose x=1x=1nor x=2x=2 because in these cases he will receive candies more than 22 times.
In the second example Arkady has to choose x=4x=4, because any smaller value leads to him receiving candies more than 11
time
.
题解:
因为d在1000之内,可以枚举d,对于每个d,可以把
n划分为(d-1)*k~d*k块,二分查找即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n,k,m,d;
scanf("%lld%lld%lld%lld",&n,&k,&m,&d);
ll ans=0;
for(ll t=1;t<=d&&t*k<=n;t++)
{
ll l=(t-1)*k,r=t*k;
while(r-l>1)
{
ll mid=(r+l)/2;
if(n/(mid+1)<m)r=mid;
else l=mid;
}
ans=max(ans,min(n/r*t,t*m));
}
printf("%lld\n",ans);
return 0;
}