大致题意:
有n罐果酱,每个盒子至多装k罐,盒子个数不限,现令n罐果酱装进这些盒子中,问:包含最少果酱的盒子中,最多能有多少罐果酱?
1<=n,k<=10^18.

我们先令每个盒子尽可能装满,求得使用了a个满盒子,1个半满盒子;记半满盒子里有b罐果酱。
n/k=a,n%k=b.
如果b=0,那么k本身即是答案;
如果b!=0,则满的盒子一定会向半满的盒子给出果酱,不妨令所有满盒子给出的果酱数相同。
设给出x罐果酱时,原满盒子恰大于等于原半满盒子的果酱数。
x满足k-x>=b+a*x

整理得 x<=(k-b)/(a+1);ans=min(k-x,b+a*x).
多给一个需额外求一下给出x+1罐果酱时的答案,取较大者输出。

#include<bits/stdc++.h>
using namespace std;
long long minmy(long long a,long long b)
{
    return a>b ? b : a;
}
long long maxmy(long long a,long long b)
{
    return a>b ? a : b;
}
int main()
{
    long long n,k;
    long long a,b;
    cin>>n>>k;
    a=n/k,b=n%k;
    if(b==0) {cout<<k;return 0;}
    long long x=(k-b)/(a+1);
    long long ans=minmy(k-x,b+a*x);
    ++x;
    ans=maxmy(ans,minmy(k-x,b+a*x));
    cout<<ans;
    return 0;
}