ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1093. Дартс

Help! I cant get AC! what's wrong with my code????
Послано abc 28 янв 2003 06:22
/* 1093 */

#include<stdio.h>
#include<iostream.h>
#include<math.h>

void main(){
    long double cx,cy,cz,nx,ny,nz,r;
    long double sx,sy,sz,vx,vy,vz;
    long double a,b,c,d,x,t1,t2,t,mx,my,mz;
    char hit;

    cin >>cx >> cy >> cz >>nx >>ny >>nz >>r >>sx >>sy >>sz >>vx
>>vy >>vz;

    a = nz * 5;
    b = nx * vx + ny * vy + nz * vz;
    c = nx * (cx - sx) + ny * (cy - sy) + nz * (cz - sz);
    /* at^2-bt+c=0 */

    d = b * b - 4 * a * c;
    hit = 0;

    if(d >=0 ){
        d = sqrtl(d);
        t1 = (b + d)/(a + a);
        t2 = (b - d)/(a + a);

        if( t1 >= 0){
            t = t1;
            mx = sx + vx * t;
            my = sy + vy * t;
            mz = sz + vz * t - 5 * t * t;
            x = (mx-cx)*(mx-cx) + (my-cy)*(my-cy) +
(mz-cz)*(mz-cz);
            if(x < r * r) hit = 1;
        }
        if(t2 >= 0){
            t = t2;
            mx = sx + vx * t;
            my = sy + vy * t;
            mz = sz + vz * t - 5 * t * t;
            x = (mx-cx)*(mx-cx) + (my-cy)*(my-cy) +
(mz-cz)*(mz-cz);
            if(x < r * r) hit = 1;
        }
    }
    if(hit) printf("HIT\n");
    else printf("MISSED\n");
}
Re: Help! I cant get AC! what's wrong with my code????
Послано Kolio 7 май 2003 19:55
Maybe there is a problem with the exactness.

try comareing with
x < y - 1e-8
instead of
x < y
and
x > y + 1e-8
instead of
x > y