codeforces 965c Greedy Arkady (思维题)

C. Greedy Arkady

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

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.

Input

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.

Output

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.

Examples

input

Copy

20 4 5 2

output

Copy

8

input

Copy

30 9 4 1

output

Copy

4

Note

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.

题意: 小明给大家发礼物,有n 个礼物 带着小明一共k 个人,  小明每次最多给每个人发m 个礼物,  并且要求任何一个人收到礼物的个数不多于d次。 问小明最多收到多少礼物。

思路: 贪心的去想 那么最优的状态一定是  小明有y 次 ,那么其他人有 y-1 次 得到礼品的机会。 最大的坑点就是爆 long long 

代码: 

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

ll n,m,k,d;
ll l;
ll ans;

int main()
{
    cin>>n>>k>>m>>d;
    for(int y=1;y<=d;y++)
    {
        ll x=n/(k*y-k+1);
        if(!x)break;
        if(x>m)x=m;
        ans=max(ans,x*y);
    }
    cout<<ans;
    return 0;
}

/*

1000000000000000000 1000000000000000000 1000 1000

*/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值