2020多校联赛第三场C:Operation Love

2020多校联赛第三场C:Operation Love_第1张图片
题目大意:已知有一固定大小的手掌,放进坐标轴里。
输入T,每次输入20个坐标,坐标是顺时针或者是逆时针,根据坐标判断手掌是右手掌还是左手掌;
解题思路:计算长度为 6 和 9 这两个向量的叉积,如果相乘为正数,则为逆时针,为右手,反之是左手。

#include
using namespace std;
const int N=1e5+1000;
double eps=0.5;
struct node
{
    double x,y;
} arr[N];
int t;
double dist(node a,node b)//两点间距离
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double xlj(node a,node b,node c)//向量积
{
    return (a.x-b.x)*(b.y-c.y)-(a.y-b.y)*(b.x-c.x);
}
int main()
{
    cin>>t;
    while(t--)
    {
        bool f=0;
        for(int i=0; i<20; i++)
            scanf("%lf %lf",&arr[i].x,&arr[i].y);
        for(int i=0; i<20; i++)
        {
            if(fabs(dist(arr[i],arr[(i+1)%20])-9)<eps)
            {
                if(((xlj(arr[i],arr[(i+1)%20],arr[(i+2)%20])<0)&&(fabs(dist(arr[(i+1)%20],arr[(i+2)%20])-8)<eps))||(fabs(dist(arr[(i+1)%20],arr[(i+2)%20])-6)<eps&&xlj(arr[i],arr[(i+1)%20],arr[(i+2)%20])>0))
                    f=1;
            }
        }
        if(f==1)
            puts("left");
        else
            puts("right");
    }
}


你可能感兴趣的:(2020多校联赛)