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

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

#include<bits/stdc++.h>
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");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值