又是毕业季I

时间:2023-03-10 06:26:59
又是毕业季I

洛谷P1372 又是毕业季I

对于答案a,k*a是最接近n的,即a=n/k(下取整),所以直接输n/k即可。

我的方法是

二分查找

n/k真的没有想到唉。

我找的最大公约数,如果当前的mid对应的个数比k大,就往大了找,否则往小里找,对于边界问题,要加一些特判。

#include<bits/stdc++.h>
using namespace std;
int n,k;
bool p(int x)
{
int i;
for(i=;i<=n&&i*x<=n;i++){
}
if(i->=k)
return true;
return false;
}
int main()
{
cin>>n>>k;
if(n==k)
{
cout<<;
return ;
}
int l=,r=n,mid;
while(l<r)
{
mid=(l+r)>>;
if(p(mid))
l=mid+;
else
r=mid;
}
if(k==)
cout<<n;
else
cout<<max(l-,);
return ;
}