思路:开始以为是对以分割数一半的平方求和是最佳的,后来才知道平分才是最佳的。只想着5*5>4*6没想5*10+5*5>7*8+4*4 每次平分应该只能过%40的数据。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 1000000007;
const int MAXN = 50005;
int n, m;
bool judge(int x)
{
int c=n;
LL sum=0;
for(int i=1;i<=n%x;++i)
{
c-=(n/x+1);
sum+=c*(n/x+1);
}
for(int i=1;i<=x-n%x;++i)
{
c-=(n/x);
sum+=c*(n/x);
}
if(sum>=m)
return true;
else
return false;
}
int main()
{
scanf("%d %d", &n, &m);
int l=1,r=n-1;
int ans=0;
while(l<=r)
{
int mid=(l+r)>>1;
if(judge(mid))
{
ans=mid;
r=mid-1;
}
else
l=mid+1;
}
if(ans)
printf("%d\n", ans-1);
else
puts("-1");
return 0;
}