Page **2** of **3**

### Hello.

Posted: **Tue Jun 17, 2003 11:01 pm**

by **Farid Ahmadov**

It's me again.

I used that formula and got AC.

When you find **a**: a := int(exp((1/3)*ln(n))+0.0000000001);

That's all you need to do!

And you'll all get AC. I did it at C too and now I am on the 9-th place in statistics.

### Hello.

Posted: **Tue Jun 17, 2003 11:02 pm**

by **Farid Ahmadov**

It's me again.

I used that formula and got AC.

When you find **a**: a := int(exp((1/3)*ln(n))+0.0000000001);

That's all you need to do!

And you'll all get AC. I did it at C too and now I am on 9-th place in statistics.

### Re: I don't like the judge!

Posted: **Wed Jun 18, 2003 4:55 am**

by **Observer**

Finally, the Judge did something.

They added a special judging program for this qq.

Now there are no more WAs!!!!

(See ranklist:

http://acm.uva.es/cgi-bin/OnlineJudge?ProblemStat:10509)

### 10509

Posted: **Wed Jul 02, 2003 6:14 pm**

by **htl**

Can someone help me with my code?? I'm really poor at the precision prob.

[c]

#include<stdio.h>

#include<math.h>

void main(void)

{

double n,a;

while(1)

{

scanf("%lf",&n);

if(n==0)

break;

a=ceil(pow(n,1.0/3.0))+0.0000000001;

if(a*a*a>n)

a--;

printf("%.4lf\n",(n+2*a*a*a)/3/a/a);

}

}

[/c]

Posted: **Thu Jul 03, 2003 3:50 am**

by **Observer**

I'm afraid your code cannot even get the sample i/o correct......

That means your rounding function is incorrect:

[cpp] a=ceil(pow(n,1.0/3.0))+0.0000000001;[/cpp](Why +0.0000000001 ??)

And why do you declare **a** as **double**? After all **a** should always be an integer!!!

Change it and you'll get AC!

Posted: **Thu Jul 03, 2003 9:20 am**

by **htl**

I saw it in other articles that adding 0.0000000001 can improve the precision...

I modified the code and still got WA...

[c]

#include<stdio.h>

#include<math.h>

void main(void)

{

long a;

double n;

while(1)

{

scanf("%lf",&n);

if(n==0)

break;

a=pow(n,1.0/3.0);

printf("%.4lf\n",(n+2*a*a*a)/3/a/a);

}

}

[/c]

Posted: **Thu Jul 03, 2003 10:36 am**

by **Observer**

OK. I think that that "+0.0000000001" should be put INSIDE the bracket...

That is, instead of

[cpp]ceil(pow(n,1.0/3.0))+0.0000000001;[/cpp]you should have [cpp]ceil(pow(n,1.0/3.0)+0.0000000001);[/cpp]or simply this will do in this qq: [cpp]ceil(pow(n,1.0/3.0));[/cpp]

You should keep this:[cpp] if(a*a*a>n)

a--; [/cpp]

Posted: **Thu Jul 03, 2003 6:55 pm**

by **htl**

I got AC. And you're a great helper! Thanks!

### 10509 - speed??

Posted: **Tue Oct 21, 2003 4:59 pm**

by **glyph**

Hi! I've got the usual solution in C++ for 10509, using pow() and a really short program but I get 0.600 seconds. I'm wondering, how the heck can people get 0.244 seconds in C++ for this program? I have tried precomputed look-up tables for my cubes, linear search through the table, binary search, etc. Nothing comes close.

Posted: **Tue Oct 21, 2003 7:06 pm**

by **Larry**

You don't exactly need pow in this problem.

Posted: **Wed Oct 22, 2003 1:16 am**

by **glyph**

Did you notice that I mentioned I tried look-up tables and binary searches and linear searches??? And they were slower??? Tell me, what is faster than pow()?

Posted: **Wed Oct 22, 2003 8:41 am**

by **Larry**

Unless you're doing in the problem in a weird way, something like:

k * k * k should be enough..

Posted: **Thu Oct 23, 2003 4:19 pm**

by **glyph**

Yes, one of my attempts was to use k*k*k and a linear search though all k (faster than binary search because k is small) to find the right k, and another attempt was to use a hard-coded lookup table of cubes plus linear search to find k, and again everything is way slower than my k = int(pow(n, 1.0/3.0) + 1e-12) solution. Is there any magic way to get the correct k?

### 10509 WA???HELP

Posted: **Wed Jan 05, 2005 12:36 pm**

by **Rocky**

HY Everybody

There Is Another Easy PROBLEM 10509 (R U KIDDING...).

BUT I GET WRONG ANSWER,BUT I DONT KNOW WHY

PLS.. CAN ANYONE GIVE ME SOME CRITICAL INPUT/OUTPT

THAT I CAN UNDERSTAND WHY WRONG ANSWER.....PLS......

Posted: **Thu Jan 06, 2005 6:30 pm**

by **Zuberul**

Check your output for input 1.0000