ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1075. Thread in a Space

Why does my solution isn't right even on sample test?
Posted by Ilian 31 Jul 2013 01:33
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
struct point { double x;
               double y;
               double z; };
double pi=3.14159265358979323846;
int main () {
    point a,b,c;
    double tanga,tangb,distac,distbc,ang,arc,r,angpt;
    cin >> a.x >> a.y >> a.z >> b.x >> b.y >> b.z >> c.x >> c.y >> c.z >> r ;
    distac=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)+(a.z-c.z)*(a.z-c.z));
    distbc=sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y)+(b.z-c.z)*(b.z-c.z));
    tanga=sqrt(distac*distac-r*r);
    tangb=sqrt(distbc*distbc-r*r);
    angpt=acos(((a.x-c.x)*(b.x-c.x)+(a.y-c.y)*(b.y-c.y)+(a.z-c.z)*(b.z-c.z))/
                (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)+(a.z-c.z)*(a.z-c.z))*
                 sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y)+(b.z-c.z)*(b.z-c.z))))*(180/pi); //angle between the two vectors AC and BC
    ang=angpt-(((atan2(tanga,distac)+atan2(tangb,distbc))*(180/pi)));
    ang/=360;
    arc=ang*2*pi*r;
    printf("%.2lf",tanga+tangb+arc);
    cout << endl ;
    return 0;
}

I know that I have to check if there could be a straight line but I think that the sample test should be right for my program.
My program writes 19.78 not 19.71. Thanks in advance.
Re: Why does my solution isn't right even on sample test?
Posted by Sirko 31 Jul 2013 03:03
Should be

ang=angpt-(((asin(tanga/distac)+asin(tangb/distbc))*(180/pi)));

Also, why don't you get rid of these annoying 180/pi, /=360? Try to calculate in radians.

Edited by author 31.07.2013 03:04

Edited by author 31.07.2013 03:07
Re: Why does my solution isn't right even on sample test?
Posted by Ilian 31 Jul 2013 19:58
Help I have WA8.
Then I multiplied the whole data with 500 and divide the output with 500 and then I have WA9. Why does printf doesn't work?

Edited by author 31.07.2013 21:12
Re: Why does my solution isn't right even on sample test?
Posted by Sirko 31 Jul 2013 23:26
I really have no idea. Again, try to get rid of redundant * and / — they can cause error via rounding (though I don't believe these roundings are so influential). If not, try maybe to play with different ways of calculating some values in triangles (sin or cos or tan).

Btw, problem 1042 is much more interesting for me. You solved it, good job.
Re: Why does my solution isn't right even on sample test?
Posted by Ilian 31 Jul 2013 23:44
Thanks but you solved this problem so and for you good job.
Re: Why does my solution isn't right even on sample test?
Posted by Ilian 30 Aug 2013 00:11
I found out that when you use printf for long long int you should write printf("%ld...); not lld and for double you should write printf("f....); not lf. I'll be glad if this will help someone.