zoukankan      html  css  js  c++  java
  • 【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;
    }
    
  • 相关阅读:
    while 循环 。。
    数据运算,运算符
    字符串常用操作
    列表常用操作
    三级菜单
    杂七杂八
    简单的登陆程序001
    猜年龄游戏
    实现密文输入密码
    使用urllib2打开网页的三种方法
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/ECNU3386.html
Copyright © 2011-2022 走看看