如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1020

来自"NOCOW"

跳转到: 导航, 搜索

我最开始还以为要求凸包呢!结果发现是给现成的。好,仔细观察后你会惊喜地发现不论钉子在那哪(只要保证是凸包)绳子绕在钉子上的长度总是一个钉子的周长,现在就容易了。

program cao;
const
  maxn=200;
 
var
  x,y:array[0..maxn] of extended;
  ans,r:extended;
  i,j,k,l,n,m,p,q:longint;
 
procedure init;
begin
  read(n,r);
  for i:=1 to n do
    read(x[i],y[i]);
  x[n+1]:=x[1];
  y[n+1]:=y[1];
end;
 
procedure main;
begin
  ans:=r*2*pi;
  for i:=1 to n do
    ans:=ans+sqrt(sqr(x[i+1]-x[i])+sqr(y[i+1]-y[i]));
end;
 
procedure print;
begin
  writeln(ans:0:2);
end;
 
begin
  init;
  main;
  print;
end.
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
double const  pi=acos(-1.0);
int main()
{
    int n=0,i=0;
    double sum=0,r=0,x0,y0,x1,y1,x,y;
 
    cin>>n>>r;
    cin>>x>>y;// 保存第一个点  
 
    x0=x1=x; y0=y1=y;
    sum=2*pi*r;
    for(i=1; i<n; i++)
    {
             cin>>x1>>y1;
             sum+=sqrt( (x1-x0)*(x1-x0)+ (y1-y0)*(y1-y0) );
             x0=x1; y0=y1;
    }
    if(n!=1) sum+=sqrt( (x1-x)*(x1-x)+ (y1-y)*(y1-y) );
 
    printf("%.2lf\n",sum);
    system("pause");
    return 0;
}
个人工具