
题目链接https://nanti.jisuanke.com/t/41286计蒜课区域赛网络赛The 2019 Asia Yinchuan First Round Online Programming样例输入4 4 0 0 2 0 2 2 0 2 1 1 3 0 0 2 1 1 2 1 1 5 0 0 1 0 2 2 1 3 -1 2 0 0 6 0 0 3 0 4 1 2 2 1 2 -1 1 1 0样例输出Case #1: 8.886 Case #2: 7.318 Case #3: 12.102 Case #4: 14.537辅助解释The following figure is the the trajectory of the point QQ in the first sample test case.题目大意逆时针给你n个点构成一个几何图形在这个几何图形里面给你一个点要你求出这个图形旋转一圈这个点走过的路程是多少。思路分析其实是一个简单的几何问题 我们可以以一条边为水平轴然后靠着这个水平轴转动一圈。那这样看起来就挺简单的了这个图形每转一次即从这个边转到与他相邻的边再次靠着这条水平轴那这不就是一个小扇形的弧长吗所以思路就很明显了把这个角度给求出来我们可以先求出内角角度数180-这个内教的度数再用公式就可以把弧长给求出来了以此相加就是最终的答案。AC代码#includebits/stdc.h using namespace std; typedef long long ll; const int maxn1e65; const double piacos(-1); double a[maxn],b[maxn]; int main() { int t; scanf(%d,t); for(int k1;kt;k){ ll n; scanf(%lld,n); for(int i0;in;i) scanf(%lf%lf,a[i],b[i]); double k1,k2; scanf(%lf%lf,k1,k2); a[n]a[0];b[n]b[0]; double sum0; for(int i1;in;i){ double rsqrt((k1-a[i])*(k1-a[i])(k2-b[i])*(k2-b[i])); double a1((a[i-1]-a[i])*(a[i-1]-a[i])(b[i-1]-b[i])*(b[i-1]-b[i])); double a2((a[(i1)%n]-a[i])*(a[(i1)%n]-a[i])(b[(i1)%n]-b[i])*(b[(i1)%n]-b[i])); double a3((a[(i1)%n]-a[i-1])*(a[(i1)%n]-a[i-1])(b[(i1)%n]-b[i-1])*(b[(i1)%n]-b[i-1])); double c(a1a2-a3)/(2.0*sqrt(a1)*sqrt(a2)); double xpi-acos(c); xx*180/pi; sumx*pi*r/180.; } printf(Case #%d: %.3lf\n,k,sum); } return 0; }