题目链接:
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 0x3f3f3f3f
int 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);
}
}