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

Обсуждение задачи 1348. Пусти козла в огород 2

I am having wrong answer in test 26...May I know what is test 26 or what mistake I made?
Послано ইলহাম আল মুসাব্বির 5 авг 2015 02:22
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <algorithm>
#include <cstdio>

using namespace std;

double dist(int x1, int y1, int x2, int y2)
{
     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}



int main()
{
     double mlen,rlen,dmin,dmax,dtemp,dab_bc_ca[3];
     //mlen is the perpendicular distance from C to AB
     //rlen is Rope Length
     //dab_bc_ca is length of AB, BC and CA
     int x1,y1,x2,y2,cx,cy;
     cin>>x1>>y1>>x2>>y2>>cx>>cy>>rlen;

     if (x1==x2 & y1==y2) //when A and B are same points
     {
          dtemp=dist(x1,y1,cx,cy);
          if (dtemp>rlen)
          dmin=dist(x1,y1,cx,cy)-rlen;
          else dmin=0.00;
          printf("%.2f\n%.2f",dmin,dmin);

     }
     else if (x1!=x2 or y1!=y2)
     {
     mlen=cx*(y1-y2)+cy*(x2-x1)+y1*(x1-x2)-x1*(y1-y2);
     mlen=abs(mlen)/dist(x1,y1,x2,y2);

     if (mlen==0)//Check the position of C, inside AB or Not?
     {
          if (dist(x1,y1,cx,cy)+dist(x2,y2,cx,cy)==dist(x1,y1,x2,y2)) printf("0.00\n");
          else {
                    dtemp=min(dist(cx,cy,x1,y1),dist(cx,cy,x2,y2));
                    if (rlen>=dtemp) printf("0.00\n");
                    else printf("%.2f\n",dtemp-rlen);
               }
          dmax=max(dist(x1,y1,cx,cy),dist(x2,y2,cx,cy));
          if (rlen>=dmax) cout<<"0.00";
          else printf("%.2f",dmax-rlen);
     }
     else //C is outside of AB
     {
          dab_bc_ca[0]=dist(x1,y1,x2,y2); //AB
          dab_bc_ca[1]=dist(x2,y2,cx,cy); //BC
          dab_bc_ca[2]=dist(x1,y1,cx,cy); //CA
          sort(dab_bc_ca+0,dab_bc_ca+3);
          if (dab_bc_ca[2]*dab_bc_ca[2]>dab_bc_ca[1]*dab_bc_ca[1]+dab_bc_ca[0]*dab_bc_ca[0])
          {
               //For Obtuse Angle Triangle
               dab_bc_ca[2]=dist(x1,y1,cx,cy); //CA
               dab_bc_ca[1]=dist(x2,y2,cx,cy); //CB
               dtemp=max(dab_bc_ca[2],dab_bc_ca[1]);
               //Rope length is biggest
               if (rlen>=dtemp) printf("0.00\n0.00");
               else
               {
                    dtemp=min(dist(x1,y1,cx,cy),dist(x2,y2,cx,cy));
                    if (rlen>=dtemp) printf("0.00\n");
                    else printf("%.2f\n",dtemp-rlen);
                    dtemp=max(dist(x1,y1,cx,cy),dist(x2,y2,cx,cy));
                    printf("%.2f",dtemp-rlen);
               }

          }

          else
          {
               //for Acute angle Triangle
               if (rlen>=mlen) cout<<"0.00\n"<<endl;
               else printf("%.2f\n",mlen-rlen);
               dtemp=max(dist(x1,y1,cx,cy),dist(x2,y2,cx,cy));
               if (rlen>=dtemp) cout<<"0.00";
               else printf("%.2f",dtemp-rlen);
          }
     }
     }
     return 0;
}