WA: 11436 - Cubes - EXTREME!!!
Posted: Mon Oct 20, 2008 6:14 pm
I got AC.
Code: Select all
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<sstream>
#include<map>
#include<stack>
#include<set>
#include<cmath>
#include<iomanip>
using namespace std;
#define PB push_back
#define vi vector<int>
#define LL long long
#define all(v) v.begin(),v.end()
#define pii pair<int,int>
#define MP make_pair
#define INF 200000000
int main()
{
while(1)
{
LL n,x,y;
cin>>n;
if(!n) break;
vi div;
for(int i=1;i<=50000;i++)
if(n%i==0) div.PB(i);
LL k;
pii res=MP(INF,INF);
for(int i=0;i<div.size();i++)
{
bool done=0;
k=div[i];
LL lo=1,hi=100000000,mid;
while(lo<=hi)
{
mid=lo+(hi-lo)/2;
LL m=k * ( k*k + 3*k*mid + 3*mid*mid );
if(m==n){
y=mid;
done=1;
break;
}
else if(m>n)
hi=mid-1;
else
lo=mid+1;
}
x=k+y;
if(done) res=min(res,MP((int)y,(int)x));
}
if(res.first==INF)
printf("No solution\n");
else
printf("%d %d\n",res.second,res.first);
}
}
Code: Select all
26
63
Code: Select all
3 1
4 1
Code: Select all
q = sqrt(d);
Code: Select all
q = sqrt(d) + eps;