20170717 B. Rolling The Polygon

The 2018 ACM-ICPC Chinese Collegiate Programming Contest

弧长=圆心角(弧度制)×半径

注:double是 %lf , long long 是 %lld;

通过余弦定理算∠p0p1p2,实际转过的角是π-∠p0p1p2;

或者通过向量算角度要方便一点

 

#include <iostream>
#include<cmath>
using namespace std;
double sz[55][2];
double bianlen[55];
double threebian[55];
double banjin[55];
double jiao[55];
double qx,qy;
double pi=acos(-1.0);
void jsbian(int x)
{
    double a,b;
    for(int i=0; i<x; i++)
    {

        a=(sz[i][0]-sz[(i+1)%x][0]);
        b=(sz[i][1]-sz[(i+1)%x][1]);

        bianlen[i]=sqrt(a*a+b*b);
    }
}
void js3thbian(int x)
{
    double a,b;
    for(int i=0; i<x; i++)
    {
        a=(sz[i][0]-sz[(i+2)%x][0]);
        b=(sz[i][1]-sz[(i+2)%x][1]);
        threebian[i]=sqrt(a*a+b*b);
    }

}
void jsR(int x)
{
    double a,b;
    for(int i=0; i<x; i++)
    {
        a=(sz[i][0]-qx);
        b=(sz[i][1]-qy);
        banjin[i]=sqrt(a*a+b*b);
    }
}
void jsjiao(int x)
{
    double a,b;
    for(int i=0; i<x; i++)
    {
        a=(bianlen[i]*bianlen[i]+bianlen[(i+1)%x]*bianlen[(i+1)%x]-threebian[i]*threebian[i]);
        b=(bianlen[i]*bianlen[(i+1)%x]*2.0);
        jiao[(i+1)%x]=pi-acos(a/b);
    }
}
int main()
{


    double sum=0;

    int t,n;
    scanf("%d",&t);
    for(int m=1; m<=t; m++)
    {
  //  freopen("1.txt","a",stdout);
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%lf %lf",&sz[i][0],&sz[i][1]);
        scanf("%lf %lf",&qx,&qy);
        /*
        cin>>sz[i][0]>>sz[i][1];
        cin>>qx>>qy;*/
        sum=0;

        jsbian(n);
        js3thbian(n);
        jsR(n);
        jsjiao(n);

        for(int i=0; i<n; i++)
            sum=sum+jiao[i]*banjin[i];
        printf("Case #%d: %.3lf\n",m,sum);

    }
    return 0;

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值