what I have done here:

a) i have calculated the dot product of the direction vectors of the
centre of mass from origin and the velocity vector. this gives me the
length of projection of the former on the latter - A
b) i already know the distance of centre of mass from the origin - B
c) so sqrt(B^2-A^2) gives me the distance of the centre of mass from
the origin at its minimum value

But I am getting the answer wrong for half of the cases using this
approach.

I also tried the differentiation method and the output is correct from
that algorithm. I just wanted to know what could possibly go wrong
with my code above.


On Sep 16, 11:00 pm, Seedrick <[email protected]> wrote:
> Someone please tell me what is the problem in my code
>
> #define sq(a) ((a)*(a))
> #define ERR 1e-7
> int main() {
>         freopen("B-small-attempt11.in","r",stdin);
>         freopen("B-small-attempt11.out","w",stdout);
>         int tc,i,j,k,n,a,b,c,va,vb,vc;
>         double u[3],ap,dot,dmin,tmin,mod;
>         cin >> tc;
>         for(i=0;i<tc;i++) {
>                 cin >> n;
>                 vector<double> p(3,0.0);
>                 vector<double> v(3,0.0);
>                 for(j=0;j<n;j++) {
>                         cin >> a >> b >> c >> va >> vb >> vc;
>                         p[0]+=a;
>                         p[1]+=b;
>                         p[2]+=c;
>                         v[0]+=va;
>                         v[1]+=vb;
>                         v[2]+=vc;
>                 }
>                 p[0]=p[0]/n;
>                 p[1]=p[1]/n;
>                 p[2]=p[2]/n;
>
>                 v[0]=v[0]/n;
>                 v[1]=v[1]/n;
>                 v[2]=v[2]/n;
>
>                 mod = sqrt ( sq(v[0])+sq(v[1])+sq(v[2]) );
>                 if(mod < ERR )
>                 {
>                         mod=0.0;
>                         dmin=sqrt (sq(p[0])+sq(p[1])+sq(p[2]));
>                         if(dmin < ERR)
>                                 dmin =0.0 ;
>                         printf("Case #%d: %.8lf %.8lf\n",i+1,dmin,mod);
>                         continue;
>                 }
>                 u[0]=v[0]/mod;
>                 u[1]=v[1]/mod;
>                 u[2]=v[2]/mod;
>                 ap=sq(p[0])+sq(p[1])+sq(p[2]);
>                 dot=p[0]*u[0]+p[1]*u[1]+p[2]*u[2];
>                 if(fabs(dot) < ERR)
>                 {
>                                 dmin = sqrt(ap);
>                                 tmin=0.0;
>                 }
>                 else
>                 {
>                         dmin= ap-sq(dot);
>                         dmin = sqrt(dmin);
>                         tmin = (fabs(dot))/mod;
>                 }
>                 printf("Case #%d: %.8lf %.8lf\n",i+1,dmin,tmin);
>         }
>         return 0;
>
> }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-codejam" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-code?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to