HUST 1563

来源:互联网 发布:共识网 知乎 编辑:程序博客网 时间:2024/06/04 20:06

题目链接:

http://acm.hust.edu.cn/problem/show/1563

题解:

使用的是坐标分解的方法。

代码:

#include <cstdio>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fint main(){    int t;    int id=1;    scanf("%d",&t);    while(t--)    {        double a,b,c;        scanf("%lf%lf%lf",&a,&b,&c);        double r,px,py,pz;        scanf("%lf%lf%lf%lf",&r,&px,&py,&pz);        double vx,vy,vz,t;        scanf("%lf%lf%lf%lf",&vx,&vy,&vz,&t);        a-=2*r;        b-=2*r;        c-=2*r;        px-=r;        py-=r;        pz-=r;        double len_x=fmod(fmod(vx*t,2*a)+2*a,2*a);        double len_y=fmod(fmod(vy*t,2*b)+2*b,2*b);        double len_z=fmod(fmod(vz*t,2*c)+2*c,2*c);        len_x+=px;        len_y+=py;        len_z+=pz;        if(len_x>=2*a)            len_x-=2*a;        else if(len_x>=a)            len_x=a-(len_x-a);        if(len_y>=2*b)            len_y-=2*b;        else if(len_y>=b)            len_y=b-(len_y-b);        if(len_z>=2*c)            len_z-=2*c;        else if(len_z>=c)            len_z=c-(len_z-c);        printf("Case #%d:",id++);        printf(" %.1f %.1f %.1f\n",len_x+r,len_y+r,len_z+r);    }}
0 0