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

Общий форум

1185 (Wall) : why do my program get wa? please have a look
Послано Sam Green 8 апр 2002 01:57
#include <stdio.h>
#include <math.h>
struct co {
  int x,y;
};
 double dist(co a, co b) {
  return sqrt((a.x-b.x)*(double)(a.x-b.x)+(a.y-b.y)*(double)(a.y-b.y));
 }

 int cw(co a, co b, co c) {
  return (c.x-a.x)*(double)(b.y-a.y)>(b.x-a.x)*(double)(c.y-a.y);
 }
void main() {
#ifndef ONLINE_JUDGE
freopen("1185.in","r",stdin);
freopen("1185.out","w",stdout);
#endif
const int maxsize=1000;
co p[maxsize];
int size;
int i,j,k;
int s[maxsize*2];
int ssize;
int p1,p2,c;
double length;
int r;
 scanf("%d%d",&size,&r);
 length=2*(2*acos(0))*r;
 for (i=0; i<size; i++)
  scanf("%d%d",&(p[i].x),&(p[i].y));
 for (i=1,k=0; i<size; i++)
  if ((p[i].x<p[k].x)||((p[i].x==p[k].x)&&(p[i].y<p[k].y)))
   k=i;
 ssize=0;
 for (i=0; i<=size; i++){
  s[ssize++]=(k+i)%size;
  for (j=0; ssize>=3 && !j; ) {
   c=s[--ssize];
   p1=s[--ssize];
   p2=s[--ssize];
   if (j=cw(p[p2],p[p1],p[c])) {
    s[ssize++]=p2;
    s[ssize++]=p1;
    s[ssize++]=c;
   }
   else {
    s[ssize++]=p2;
    s[ssize++]=c;
   }
  }
 }
 for (i=1; i<ssize; i++)
  length+=dist(p[s[i-1]], p[s[i]]);
 printf("%.0lf",length);
}