cf 203

http://codeforces.com/contest/203
 이번 에는 거의 다 물 문제 인 데, 애석 하 게 도 나 는 밤 에 인터넷 이 없 었 고, 둘 째 는 개인 적 으로 문 제 를 읽 는 것 이 너무 느 렸 다.
D 문제 코드 를 붙 여 주세요. 벽 이나 바닥 에 닿 으 면 튕 겨 서 속도 벡터 를 반대로 빼 세 요.
#include <iostream>
#include <cstdio>

using namespace std;
#define dcout if(false) cout
const double eps=1e-8;

double a,b,m;
double x0,y0,z0,x,y,z;;

int sign(double a)
{
    if(a<eps&a>-eps) return 0;
    else if(eps>0) return 1;
    return -1;
}
int main()
{
    while(cin>>a>>b>>m)
    {
        cin>>x0>>y0>>z0;
        x=a/2,y=m,z=0;
        while(1)
        {
            double t1=max(-x/x0,(a-x)/x0);
            double t2=-y/y0;
            double t3=max(-z/z0,(b-z)/z0);
            double t;
            t=min(t1,t3);
            t=min(t,t2);
            x+=t*x0;
            y+=t*y0;
            z+=t*z0;
            if(!sign(y)) break;
            else if(!sign(x)||!sign(x-a)) x0=-x0;
            else if(!sign(z)||!sign(z-b)) z0=-z0;
        }
        //cout<<x<<" "<<y<<" "<<z<<endl;
        printf("%.7lf %.7lf
",x,z); } return 0; }

좋은 웹페이지 즐겨찾기