南郵OJ 1180 H-パイプボール
H-パイプボール
時間制限(通常/Java):
1000 MS/3000 MS運転メモリ制限:65536 KByte
合計コミット:64テスト合格:18
試合の説明
断面長方形のパイプがあり、デカルト座標系では、そのパイプの中軸線がx軸であり、パイプの入口が平面x=0、パイプ出口がx=Xであると仮定しない.
パイプ界面の長さはa,幅はbであり,長辺はy軸に平行であり,広辺はz軸に平行である.
パイプの入り口(0,0,0)に半径が無視でき、重力を無視できない小さなボールがあると仮定します.今、小さなボールに初速度v=(vx,vy,vz)で小さなボールを動かします.小さなボールがパイプの壁にぶつかると、小さなボールが完全に反発します.小さなボールは出口断面に到達できますか?断面座標は何ですか?
入力
a,b,X,vx,vy,vz(0しゅつりょく
ボールがパイプ出口断面に到達すると、実数:X,Y,Zが出力され、単一のスペースで区切られ、到達はいの座標が表示されます.そうしないと、「impossible」が出力され、すべての結果は3桁の小数点を保持します.
サンプル入力
10 10 10 10 0 0
サンプル出力
10.000 0.000 0.000
ヒント
undefined
テーマソース
NJU 7th ACM contest
時間制限(通常/Java):
1000 MS/3000 MS運転メモリ制限:65536 KByte
合計コミット:64テスト合格:18
試合の説明
断面長方形のパイプがあり、デカルト座標系では、そのパイプの中軸線がx軸であり、パイプの入口が平面x=0、パイプ出口がx=Xであると仮定しない.
パイプ界面の長さはa,幅はbであり,長辺はy軸に平行であり,広辺はz軸に平行である.
パイプの入り口(0,0,0)に半径が無視でき、重力を無視できない小さなボールがあると仮定します.今、小さなボールに初速度v=(vx,vy,vz)で小さなボールを動かします.小さなボールがパイプの壁にぶつかると、小さなボールが完全に反発します.小さなボールは出口断面に到達できますか?断面座標は何ですか?
入力
a,b,X,vx,vy,vz(0しゅつりょく
ボールがパイプ出口断面に到達すると、実数:X,Y,Zが出力され、単一のスペースで区切られ、到達はいの座標が表示されます.そうしないと、「impossible」が出力され、すべての結果は3桁の小数点を保持します.
サンプル入力
10 10 10 10 0 0
サンプル出力
10.000 0.000 0.000
ヒント
undefined
テーマソース
NJU 7th ACM contest
#include<iostream>
int main(){
// freopen("test.txt","r",stdin);
double a,b,X,vx,vy,vz,t,disy,disz;
scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&X,&vx,&vy,&vz);
if(vx==0){
if(X==0){
printf("%.3lf %.3lf %.3lf
",X,0,0);
}else{
printf("impossible
");
}
return 0;
}
t = X/vx;
if(t<0){
printf("impossible
");
return 0;
}
disy = vy*t;
while(disy<-a/2){
disy += 2*a;
}
while(disy>3*a/2){
disy -= 2*a;
}
if(disy>a/2){
disy = a-disy;
}
disz = vz*t;
while(disz<-b/2){
disz += 2*b;
}
while(disz>3*b/2){
disz -= 2*b;
}
if(disz>b/2){
disz = b-disz;
}
printf("%.3lf %.3lf %.3lf
",X,disy,disz);
}