红神的火炬

题目链接: http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3337&konwledgeId=40

解题思路: 把外面的线分成两个部分,直线的部分和曲线的部分,直线的部分刚好对于多边形的周长,曲线的部分正好是一个圆。n边型共有n个顶点,其中对于每个圆柱的顶点,内角和对应的外角和共180,所以所有的外角和是n*180-(n-2)*180=360。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 typedef long long LL;
 5 const int MAXN=100005;
 6 const LL MOD7 = 1e9+7;
 7 
 8 int n;
 9 double R;
10 double c[105][2];
11 
12 void solve()
13 {
14     double ans = 0;
15     for (int i=2;i<=n;++i)
16     {
17         ans += sqrt((c[i][0]-c[i-1][0]) * (c[i][0]-c[i-1][0]) + (c[i][1]-c[i-1][1])*(c[i][1]-c[i-1][1]));
18     }
19     ans+=sqrt((c[1][0]-c[n][0])*(c[1][0]-c[n][0]) + (c[1][1]-c[n][1])*(c[1][1]-c[n][1]));
20     ans+=2*3.1415926*R;
21     printf("%.2f\n",ans);
22 }
23 int main()
24 {
25 #ifndef ONLINE_JUDGE
26     freopen("test.txt","r",stdin);
27 #endif // ONLINE_JUDGE
28     scanf("%d%lf",&n,&R);
29     for (int i=1;i<=n;++i) scanf("%lf%lf",&c[i][0],&c[i][1]);
30     solve();
31     return 0;
32 }

 

posted @ 2018-05-04 23:28  只会一点暴力  阅读(151)  评论(0编辑  收藏  举报