【ECNU3386】Hunter's Apprentice(多边形有向面积)

点此看题面

大致题意: 按顺序给你一个多边形的全部顶点,让你判断是按顺时针还是逆时针给出的。

多边形有向面积

显然我们知道,叉积可以求出两个向量之间有向面积的两倍。

所以,我们三角剖分,就可以求出四边形的有向面积。

则我们就可以由此推知给出的顺序了。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 20
using namespace std;
int n;
struct Point
{
    int x,y;I Point(CI a=0,CI b=0):x(a),y(b){}
    I Point operator - (Con Point& o) Con {return Point(x-o.x,y-o.y);}
    I int operator ^ (Con Point& o) Con {return x*o.y-y*o.x;}
}p[N+5];
I int PolygonArea(CI n,Point *p)//多边形有向面积
{
    RI i,t=0;for(i=3;i<=n;++i) t+=(p[i-1]-p[1])^(p[i]-p[1]);//三角剖分
    return t;//本应除以2,但为避免double运算,此处省去
}
int main()
{
    RI Tt,i;scanf("%d",&Tt);W(Tt--)
    {
        for(scanf("%d",&n),i=1;i<=n;++i) scanf("%d%d",&p[i].x,&p[i].y);//读入数据
        puts(PolygonArea(n,p)>0?"fight":"run");//判断
    }return 0;
}

转载于:https://www.cnblogs.com/chenxiaoran666/p/ECNU3386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值