Page 2 of 3
Posted: Tue May 23, 2006 4:23 pm
by Ankur Handa
hi everyone i am getting wrong answer for this question .
I have tried many times but everytime i got wrong answer my program is
working for all of the test cases given in the forum , can anybody tell me
where am i going wrong .
My logic is if V is divisible by 2*V0 then print the number V/(2*V0)
else find n = V/(2*V0) and then u will have to check for 2 values floor(n)
and floor(n)+1 and if the Max length is coming out to be same then print
0 otherwise print round(n).
here is the Code
Code: Select all
#include<stdio.h>
#include<iostream>
#include<math.h>
int main(void)
{
int V,V0;
double n,n1,L1,L2,x,z;
while(1)
{
scanf("%d%d",&V,&V0);
L1=0;L2=0;
if(V==0 && V0==0) break;
if((V%(2*V0))==0) printf("%d\n",V/(2*V0));
else
{
n = (double)V/(2*(double)V0);
n1 = n;
n = floor(n);
z = (double)V/(double)n ;
x = (double)V/(double)(n+1);
if(n!=0 && z>V0)
{
L1 = (n)*(0.3)*sqrt(z-(double)V0);
}
if(x>V0)
L2 = (n+1)*(0.3)*sqrt(x-V0);
if(L1==L2 || V==V0)printf("0\n");
else printf("%.lf\n",n1);
}
}
}
Thanks a lot
Posted: Sun May 28, 2006 8:51 pm
by Martin Macko
Ankur Handa wrote:hi everyone i am getting wrong answer for this question .
I have tried many times but everytime i got wrong answer my program is
working for all of the test cases given in the forum , can anybody tell me
where am i going wrong .
Actually, your solution is not working even for the second test case in the problem statement. (Small hint: never compare floats directly by
a == b, because even small precision errors may lead to a different answer than you expect.)
Posted: Thu Jun 15, 2006 9:21 pm
by Kallol
I cant get any clue
I got correct output for all the inputs posted in this thread ....still WA !!
would anyone check my code, please ?
Posted: Sun Jun 18, 2006 6:30 pm
by Martin Macko
Kallol wrote:I cant get any clue
I got correct output for all the inputs posted in this thread ....still WA !!
Your code's not working for:
Check the following part of your code:
Kallol's code wrote:......if(v0>vt)
......{
.........printf("0\n");
.........continue;
......}
Posted: Tue Jul 04, 2006 3:03 pm
by Kallol
Thanx a lot Martin Macko,
I finally got ACC.
It was just a mistake of a symbol but it made me so crazy and wasted a lot of my time . I think this has become a regular event for me. I think about a problem get the solution way and then code it but do not get ACC for some silly reasons.Anyway you were so helpful and so expert to find out the bug in my code . Thank u once again.
Why WA?
Posted: Wed Jul 19, 2006 2:21 pm
by sarah
Can someone help me why I get WA for this problem?
I've checked all the test case here and my program outputs the correct numbers, but WA!
In my code, if Vt % (2*V0) is zero I output Vt / (2*V0) as n, and if it is not zero, I check which of n1=Vt/(2*V0) & n2=Vt/(2*V0) produces a bigger length, and output it. And if they are equal, I output zero. And whenever I find n, I check if (Vt/n)-V0>=0 . If it is negative I output 0 as n.
In order to see if the two lengths are equal or not, each time I get the leftmost digit of the two numbers and compare them. then I omit this leftmost digit and continue this procedure until the number becomes zero. But there is a problem that I dont know how many times should I continue this procedure. If you could suggest me a better way to compare two doubles, then it's so kind of you!
Here's my code:
Code: Select all
# include <iostream.h>
//# include <fstream>
# include <math.h>
//using namespace std;
void main()
{
int vt,v0,i,j,r1,r2;
double res1,res2,vf;
int n,n1,n2;
for (cin>>vt>>v0 ; vt || v0 ; cin>>vt>>v0)
{
if (vt<=v0)
cout<<"0"<<endl;
else
{
if ((vt)%(2*v0)==0)
{
n=vt/(2*v0);
if (vt/n>=v0)
{}
else
n=0;
}
else
{
n1=vt/(2*v0);
n2=n1+1;
vf=vt;
if (vt/n1>=v0)
res1=0.3*n1*sqrt(vf/n1-v0);
else
res1=-1;
if (vt/n2>=v0)
res2=0.3*n2*sqrt(vf/n2-v0);
else
res2=-1;
if (res1==-1 && res2==-1)
n=0;
else
{
for (i=0 ; ; i++)
if (((int)(res1/pow(10,i)))==0)
break;
for (j=0 ; ; j++)
if (((int)(res2/pow(10,j)))==0)
break;
if (i>j)
n=n1;
else
if (i<j)
n=n2;
else
{
if (!i)
{
i++;
res1*=10;
res2*=10;
}
while(1)
{
r1=res1/pow(10,i-1);
r2=res2/pow(10,i-1);
if (r1>r2)
{
n=n1;
break;
}
if (r2>r1)
{
n=n2;
break;
}
res1-=(r1*pow(10,i-1));
res2-=(r1*pow(10,i-1));
res1*=10;
res2*=10;
if (res1==0)
{
if (res2==0)
{
n=0;
break;
}
n=n2;
break;
}
else
{
if (res2==0)
{
n=n1;
break;
}
}
}
}
}
}
cout<<n<<endl;
}
}
}
Posted: Fri Jul 21, 2006 9:51 am
by leocm
My code get the correct output for all the inputs here, bat get WA when I submit. What's wrong? Anyone can help me, please!
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int calculaMaiorTamanho(int volume1, int volume2);
int main(){
int volume1, volume2, maiorTamanho;
scanf("%d%d", &volume1, &volume2);
while (volume1 != 0 || volume2 != 0){
if (volume1 <= volume2){
printf("0\n");
}
else{
maiorTamanho = calculaMaiorTamanho(volume1, volume2);
printf("%d\n", maiorTamanho);
}
scanf("%d%d", &volume1, &volume2);
}
return 0;
}
int calculaMaiorTamanho(int volume1, int volume2){
int n, maiorQuantidadeAneis = 0;
double tamanho1, tamanho2;
if (volume1 % (2*volume2) == 0){
maiorQuantidadeAneis = volume1 / (2*volume2);
}
else{
n = volume1 / (2*volume2);
tamanho1 = 0.3 * n * sqrt((double)((double)volume1/n - volume2));
tamanho2 = 0.3 * (n+1) * sqrt((double)((double)volume1/(n+1) - volume2));
if (fabs(tamanho1 - tamanho2) < 0.0000000000000001){
maiorQuantidadeAneis = 0;
}
else{
if (tamanho1 > tamanho2){
maiorQuantidadeAneis = n;
}
else{
maiorQuantidadeAneis = n+1;
}
}
}
return maiorQuantidadeAneis;
}
Re: Why WA?
Posted: Sun Jul 23, 2006 7:17 pm
by Martin Macko
sarah wrote:Can someone help me why I get WA for this problem?
I've checked all the test case here and my program outputs the correct numbers, but WA!
Your solution gives a
Floating point exception on the following input:
Posted: Sun Jul 23, 2006 7:19 pm
by Martin Macko
leocm wrote:My code get the correct output for all the inputs here, bat get WA when I submit. What's wrong? Anyone can help me, please!
Try the following input:
Code: Select all
36584 8
8134 363
45029 46
47250 24
10545 215
10927 565
34317 1
36947 155
23547 21
59272 112
0 0
My AC's output is:
Posted: Sun Jul 23, 2006 10:21 pm
by leocm
Martin Macko wrote:leocm wrote:My code get the correct output for all the inputs here, bat get WA when I submit. What's wrong? Anyone can help me, please!
Try the following input:
Code: Select all
36584 8
8134 363
45029 46
47250 24
10545 215
10927 565
34317 1
36947 155
23547 21
59272 112
0 0
My AC's output is:
Now, I get AC. But I didn't understand why... I just only changed the code
Code: Select all
if (fabs(tamanho1 - tamanho2) < 0.0000000000000001){
maiorQuantidadeAneis = 0;
}
to the new code
Code: Select all
if (fabs(tamanho1 - tamanho2) < 0.000000000001){
maiorQuantidadeAneis = 0;
}
and now got AC! Why this happened? I really don't understand the reason. Somebody could explain me?
Thank you.
Posted: Sun Jul 23, 2006 10:42 pm
by Martin Macko
leocm wrote:I really don't understand the reason. Somebody could explain me?
Thank you.
double just does not have such a big precision, therefore you got a rounding error. Personaly, I am comparing
doubles with error tolerance about
1e-9.
Posted: Wed Sep 06, 2006 9:31 am
by Nazmul Quader Zinnuree
I've have used just 'int'
Code: Select all
n = vt / v0 / 2;
if ((vt * n - v0 * n * n) == (vt * (n + 1) - v0 * (n + 1) * (n + 1)))
/* */

Posted: Sat Mar 10, 2007 7:07 pm
by marthapfhui
Hi, I am getting WA though passing the test cases posted here. The way I do the question is similar.
Would anyone give me a hand to tell if there's anything wrong? Thanks a lot in advance.
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char **argv)
{
double vt, v0;
double minn, d1, d2;
int n1, n2;
while(scanf("%lf%lf", &vt, &v0))
{
if(vt == 0 && v0 == 0) break;
if(vt <= v0)
{
printf("0\n");
continue;
}
else if(fabs(v0-vt) < 0.000000001)
{
printf("0\n");
continue;
}
minn = vt/2.0/v0;
if(((double)fabs(minn - round(minn))) < 0.000000001)
{
n1 = round(minn);
if(fabs(vt/n1 - v0) < 0.000000001)
{
printf("0\n");
}
else if(vt/n1 < v0)
{
printf("0\n");
}
else
{
printf("%d\n", n1);
}
}
else
{
n1 = floor(minn);
n2 = ceil(minn);
if(n1 != 0)
{
if(fabs(vt/n1 - v0) < 0.000000001) n1 = 0;
else if(vt/n1 < v0) n1 = 0;
}
if(fabs(vt/n2 - v0) < 0.000000001) n2 = 0;
else if(vt/n2 < v0) n2 = 0;
if(n1 == 0 && n2 == 0)
{
printf("0\n");
}
else if(n1 == 0)
{
printf("%d\n", n2);
}
else if(n2 == 0)
{
printf("%d\n", n1);
}
else
{
d1 = n1 * 0.3 * sqrt((vt/n1) - v0);
d2 = n2 * 0.3 * sqrt((vt/n2) - v0);
if(fabs(d1-d2) < 0.00000001)
{
printf("0\n");
}
else if(d1 < d2)
{
printf("%d\n", n2);
}
else
{
printf("%d\n", n1);
}
}
}
}
}
Posted: Fri Apr 06, 2007 6:15 am
by SHAHADAT
Darko wrote:for the input:
Code: Select all
40000 3
40000 9
50000 3
60000 7
60000 9
60000 11
0 0
output:
Darko
BUT MY AC PROGRAM GIVES THE FOLLOWING OUTPUT:
6666
2222
8333
4285
3333
2727
Martin maco wrote:for the input:
Code: Select all
Try the following input:
Code:
36584 8
8134 363
45029 46
47250 24
10545 215
10927 565
34317 1
36947 155
23547 21
59272 112
0 0
Code: Select all
My AC's output is:
Code:
0
11
489
984
25
10
0
119
561
265
Martin maco
BUT MY OUTPUT IS
0
11
489
984
24
9
0
119
560
264
WHICH ONE'S IS CORRECT?

Posted: Fri Apr 06, 2007 1:23 pm
by Jan
The outputs of Darko and Martin maco are correct, as my accepted code returns same output.