题解:AT_abc397_d [ABC397D] Cubes
1.前言
这一道题,乍一眼看,题面十分清晰:
给你一个
你可能会想到直接枚举
这样,
想象一个棱长为
2.优化
要想解决这个问题,一定要老老实实遍历一个元素,既然
联想之前的长方体,宽度
我们在之前构造的
时间复杂度超过
3.long long问题
利用 longlong。
所以,我们定义
4.AC code
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int n;
cin>>n;
int num=cbrt(n);
for(int i=1;i<=num;i++)
{
int m=n-i*i*i;
if(m%3) continue;
m/=3;
int l=1,r=sqrt(m/i)+i;
while(l<=r)
{
int mid=(l+r)/2;
int nu=i*mid*(mid-i);
if(nu==m)
{
if(mid==i) break;
cout<<mid<<' '<<mid-i;
return 0;
}
if(nu<m) l=mid+1;
else r=mid-1;
}
}
cout<<-1;
return 0;
}
——By AtCoder AC code