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

Обсуждение задачи 1185. Wall

Pls explain me why WA ... I tried so many things ...
Послано Rostislav 14 окт 2002 23:37
// here is my code...
#include <fstream.h>
#include <math.h>
#include <stdio.h>

 struct point
  {
   double x,y,ang;
  };

 point a[1024],convex[1024],pom;

 double det (double x1,double y1,double x2,double y2,double x3,double
y3)
  {
   return x1*(y2-y3)-y1*(x2-x3)+x2*y3-y2*x3;
  }

 void qsort (long l,long r)
  {
   double z;
   long i,j;
   i=l;
   j=r;
   z=a[(i+j)/2].ang;
   do
    {
     while (z>a[i].ang) i++;
     while (z<a[j].ang) j--;
     if (i<=j)
      {
       pom=a[i];
       a[i]=a[j];
       a[j]=pom;
       i++;
       j--;
      }
    }
   while (i<=j);
   if (l<j) qsort(l,j);
   if (i<r) qsort(i,r);
  }

 void main ()
  {
   long n,i,p,k;
   double d,l;
   cin >> n >> l;
   for (i=1;i<=n;i++)
    cin >> a[i].x >> a[i].y;
//------------------
   p=1;
   for (i=2;i<=n;i++)
    if (a[p].y>a[i].y || (a[p].y==a[i].y && a[p].x>a[i].x))
     p=i;
   pom=a[p];
   a[p]=a[1];
   a[1]=pom;
   a[1].ang=-2000000000;
   for (i=2;i<=n;i++)
    a[i].ang=atan2(a[i].y-a[1].y,a[i].x-a[1].x);
   qsort(1,n);
   a[n+1]=a[1];
   p=1;
   for (i=2;i<=n;i++)
    if (a[i].y==a[1].y && a[i].x>a[p].x)
     p=i;
   if (p==1)
    p=2;
   convex[1]=a[1];
   convex[2]=a[p];
   k=2;
   for (i=p+1;i<=n+1;i++)
    if (a[i].y>a[1].y || i==n+1)
     {
      convex[++k]=a[i];
      while (det(convex[k-2].x,convex[k-2].y,convex[k-1].x,convex[k-
1].y,convex[k].x,convex[k].y)<0 && k>2)
       convex[--k]=convex[k+1];
     }
//------------------
   double pi;
   pi=3.14159265358979;
   d=0;
   for (i=1;i<k;i++)
    d+=sqrt((convex[i].x-convex[i+1].x)*(convex[i].x-convex[i+1].x)+
(convex[i].y-convex[i+1].y)*(convex[i].y-convex[i+1].y));
   d+=(2*pi*l);
//------------------
   printf("%.0lf",d);
  }
//thank's in advance!