10589 - Area

Moderator: Board moderators

CodeMaker
Experienced poster
Posts: 183
Joined: Thu Nov 11, 2004 12:35 pm
Hi, i am confused with this problem.

i read the posts in here. but couldn't figure out what is wrong. i got WA for more than 10 times.

i am considering that all the point coordinates has 7 digits after the decimal point ( as the problem statement says)

can anyone point out my mistake?

thanks...

Code: Select all

``````int n,a;

void process()
{
int i,j;
int cnt=0;
char xx[30],yy[30];

c1x = 0;
c1y = 0;
c2y = 0;
c4x = 0;

for(i=0;i<n;i++)
{
px = py = 0;
scanf("%s%s",xx,yy);

for(j=0;xx[j];j++)
{
if(isdigit(xx[j]))
px = px*10+(xx[j]-'0');
}

for(j=0;yy[j];j++)
{
if(isdigit(yy[j]))
py = py*10+(yy[j]-'0');
}

d1 = (px - c1x)*(px - c1x) + (py - c1y)*(py - c1y);
d2 = (px - c2x)*(px - c2x) + (py - c2y)*(py - c2y);
d3 = (px - c3x)*(px - c3x) + (py - c3y)*(py - c3y);
d4 = (px - c4x)*(px - c4x) + (py - c4y)*(py - c4y);

cnt++;

}

first = cnt * a * a / n;
last = cnt * a * a % n;

printf("%llu.%llu",first,last);

int digcnt=1;

while(last>=10)
{
digcnt++;
last/=10;
}

for(i=0;i<5-digcnt;i++)
putchar('0');
printf("\n");

}

int main(void)
{
freopen("in.in","r",stdin);
//	freopen("out.txt","w",stdout);

int cases=1;

while(scanf("%d%d",&n,&a)==2)
{
if(n==0)
break;

process();
}

return 0;
}
``````
Jalal : AIUB SPARKS

Martin Macko
A great helper
Posts: 481
Joined: Sun Jun 19, 2005 1:18 am
Location: European Union (Slovak Republic)
CodeMaker wrote:Hi, i am confused with this problem.
i read the posts in here. but couldn't figure out what is wrong. i got WA for more than 10 times.
If cnt*a*a/n=10.0047, you write 10.47000 instead of 10.00470. Check tho following part of the code:
your code wrote:........first = cnt * a * a / n;
........last = cnt * a * a % n;

........printf("%llu.%llu",first,last);

........int digcnt=1;

........while(last>=10)
........{
................digcnt++;
................last/=10;
........}

........for(i=0;i<5-digcnt;i++)
................putchar('0');
........printf("\n");

CodeMaker
Experienced poster
Posts: 183
Joined: Thu Nov 11, 2004 12:35 pm
Hi martin, thanks for the reply. ya, that is wrong. as i was confused by the previous posts and was getting lot of wa's , so i tried many thing. and i guess i have completed half century of WA for this problem. now i want to put it away. may be i am missing something small and sily, but looks like it is beyond my vision and i will never find it. this is my final code. if anyone notice any mistake and informs me, then thanks to him. but i have really lost interest on this problem

Code: Select all

``````int n,a;

void process()
{

int i;
dPoint p;   // a point class that has double perameters (x,y)
long long r = a * 10000000,aa = a*10000000,px,py,d,m;
r *= r;

int cnt=0;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&p.x,&p.y);

px = p.x * 10000000 ;
py = p.y * 10000000 ;

if(px * px + py * py <= r)
if( px * px + (py - aa) * (py - aa) <=r)
if( (px - aa) * (px - aa) + py * py <= r)
if( (px - aa)*(px - aa) + (py - aa)*(py - aa) <=r)
cnt++;

}

d = m = cnt;

d = d*a*a;
m = m*a*a;

d/=n;
m%=n;

printf("%lld.",d);

for(i=(int)(log10((double)(m)))+1;i<(int)(log10((double)(n)));i++)
putchar('0');

printf("%lld",m);

for(i=(int)(log10((double)(n)))+1;i<=5;i++)
putchar('0');

putchar('\n');

}

int main(void)
{
freopen("in.in","r",stdin);
//	freopen("out.txt","w",stdout);

int cases=1;

while(scanf("%d%d",&n,&a)==2)
{
if(n==0)
break;

process();
}

return 0;
}
``````
Jalal : AIUB SPARKS

Martin Macko
A great helper
Posts: 481
Joined: Sun Jun 19, 2005 1:18 am
Location: European Union (Slovak Republic)
CodeMaker wrote:Hi martin, thanks for the reply. ya, that is wrong. as i was confused by the previous posts and was getting lot of wa's , so i tried many thing. and i guess i have completed half century of WA for this problem. now i want to put it away. may be i am missing something small and sily, but looks like it is beyond my vision and i will never find it. this is my final code. if anyone notice any mistake and informs me, then thanks to him. but i have really lost interest on this problem
I don't thing the following part of your code is precise enough:
......putchar('0');

...printf("%lld",m);

...for(i=(int)(log10((double)(n)))+1;i<=5;i++)
......putchar('0');.
Think about some other (and more precise) way to measure length of an integer.

ashikzinnatkhan
New poster
Posts: 8
Joined: Wed Jan 25, 2006 6:25 pm
Hi,
I am really bored with this problem.
I have read all the posts and my code also gives correct output
(i think!!!:oops: ). But it is producing WA again and again and again.........
Can anyone help me finding my mistake, please.

My code is:

Code: Select all

``````#include <stdio.h>
#include <string.h>

//typedef __int64 BIG;

long long dis(long long x1,long long y1,long long x2, long long y2)
{
return ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
}

main()
{
long long len,n,i,j,k,m,a,x,y,x1,y1,d1,d2,d3,d4,area,max;
char out[200],t[200],N[200];

while( scanf("%lld %lld",&n,&a) == 2 )
{
if(n == 0) break;

m = 0;

max = a*a*10000000*10000000;

for(i=0; i<n; i++)
{
scanf("%lld%*c%lld %lld%*c%lld",&x,&x1,&y,&y1);

x = x*10000000 + x1;
y = y*10000000 + y1;

d1 = dis(0,0,x,y);
d2 = dis(a,0,x,y);
d3 = dis(a,a,x,y);
d4 = dis(0,a,x,y);

if(d1 <= max && d2 <= max && d3 <= max && d4 <= max) m++;

}

area = m * a * a;

sprintf(N,"%lld",n);
len = strlen(N) - 1;

sprintf(t,"%lld",area);

j = strlen(t);

for(i=0; i<len; i++,j--);

for(k=strlen(t),i=0; i<10; i++) t[k+i] = '0';

for(i=0; i<j; i++) out[i] = t[i];

out[i] = '.';

for(k=0; k<5; k++) out[i+k+1] = t[i+k];

out[i+k+1] = '\0';

printf("%s\n",out);

}

}
``````
Ashik

kbr_iut
Experienced poster
Posts: 103
Joined: Tue Mar 25, 2008 11:00 pm
Contact:

Re: 10589 - Area

got AC using double...Judge data is okay now.
Last edited by kbr_iut on Sun Feb 15, 2009 6:25 pm, edited 1 time in total.
It is tough to become a good programmer.
It is more tough to become a good person.
I am trying both...............................

Moshiur Rahman
New poster
Posts: 13
Joined: Mon Sep 08, 2008 6:57 pm

Re: 10589 - Area

You don't need to use this complex and error prone long long method any more...
The very straightforward approach using doubles is enough to get AC. I think the judge data is ok now
Never think too hard, let ideas come to you...

kbr_iut
Experienced poster
Posts: 103
Joined: Tue Mar 25, 2008 11:00 pm
Contact:

Re: 10589 - Area

thnx "Moshiur Rahman"
u r right. judge data is okay now. and I got AC with double.
It is tough to become a good programmer.
It is more tough to become a good person.
I am trying both...............................

ajmer
New poster
Posts: 7
Joined: Thu Mar 07, 2013 2:16 am

Re: 10589 - Area

Why am I getting runtime error? Code in C. Thanks for help.

Code: Select all

``````solved
``````
Last edited by ajmer on Sun Mar 10, 2013 5:59 pm, edited 1 time in total.

brianfry713
Guru
Posts: 5947
Joined: Thu Sep 01, 2011 9:09 am
Location: San Jose, CA, USA

Re: 10589 - Area

Check input and AC output for thousands of problems on uDebug!

ajmer
New poster
Posts: 7
Joined: Thu Mar 07, 2013 2:16 am

Re: 10589 - Area

Wow, how did I forget about that, thanks.

ajmer
New poster
Posts: 7
Joined: Thu Mar 07, 2013 2:16 am

Re: 10589 - Area

But now I don't know why I'm getting WA. Am I using a wrong algorithm? Thanks in advance.

Code in C.

Code: Select all

``````#include <stdio.h>

int main()
{
int n,a,m,i;
double x,y,p,odla,odlb,odlc,odld;
scanf("%d %d",&n,&a);
while (n!=0)
{
m=0;
for (i=0;i<n;i++)
{
scanf("%lf %lf",&x,&y);
odla=x*x+y*y;
odlb=(x-a)*(x-a)+y*y;
odlc=(x-a)*(x-a)+(y-a)*(y-a);
odld=x*x+(y-a)*(y-a);
if ((odla<=a*a)&&(odlb<=a*a)&&(odlc<=a*a)&&(odld<=a*a)) m++;
}
p=m*a*a/n;
printf("%.5lf\n",p);
scanf("%d %d",&n,&a);
}
return 0;
}
``````

brianfry713
Guru
Posts: 5947
Joined: Thu Sep 01, 2011 9:09 am
Location: San Jose, CA, USA

Re: 10589 help

The input posted by Martin Macko isn't valid.
"Each of the next N lines contains two floating-point numbers, which indicates the coordinate of a point. These floating-point numbers always have seven digits after the decimal point"

Code: Select all

``````10 11
5.5000000 5.5000000
5.5000000 5.5000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
0 0``````
The output should be

Code: Select all

``24.20000``
Check input and AC output for thousands of problems on uDebug!

hoimo
New poster
Posts: 18
Joined: Sun Sep 23, 2012 3:43 am

Re: 10589 - Area

Why submiision err? plz help.

Code: Select all

``````#include<stdio.h>
#include<math.h>
int main()
{
int N, a, i, M, sq;
double x, y;
double hf, rt, minusrt;

while( scanf("%d %d", &N, &a)==2 && N!=0 )
{
M=0;
sq=a*a;
for( i=0;i<N;i++ ){
scanf("%lf %lf", &x, &y);

hf=a/2;
rt=sqrt( a*a-hf*hf );
minusrt=a-rt;

if( x<=rt && x>=minusrt ){
if( y<=rt && y>=minusrt ){
M++;
}
}
}

printf( "%.5lf\n",(double)M*a*a/N );
}
}
``````

hoimo
New poster
Posts: 18
Joined: Sun Sep 23, 2012 3:43 am