zoukankan      html  css  js  c++  java
  • 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式

    链接:https://www.nowcoder.com/acm/contest/135/E
    来源:牛客网

    题目描述

        定义“最大生成图”:在M*N的点阵中,连接一些点形成一条经过所有点恰好一次的回路,且连成的多边形各边互不交叉。这样形成的封闭图形叫做这个点阵的“最大生成图”,用表示。(PS:这个名字是出题人胡诌的,如有雷同纯属巧合,出题人不负法律责任)

        显然,任意一个点阵都有“最大生成图”,并且有的点阵的“最大生成图”不止一个。
        如图为3*3的矩阵的一个最大生成图:

        给你一个M*N的点阵和一个三角形,问你是否可以通过若干次裁剪、拼接操作,使其某一个“最大生成图”成为该三角形?如果可以,请输出“Yes”(不含引号),否则请输出“No”。

        在本题中,M*N的点阵内,相邻两点间的距离为1(上下相邻和左右相邻),为了简便,给定三角形的两个顶点,第三个顶点是原点。

        由于Apojacsleam的计算几何往往被精度卡飞,所以他痛恨精度错误,于是给定的数字都是整数。

    输入描述:

    输入数据有多组:

    每组输入数据两行,第一行两个正整数M,N,第二行四个整数x1,y1,x2,y2,描述一个三角形数据不保证能够形成三角形。

    输出描述:

    对于每组输入数据,输出一行描述答案:“Yes”或“No”
    示例1

    输入

    复制
    2 2
    2 0 2 1

    输出

    复制
    Yes

    说明

    样例解释:
     

    波尔约-格维也纳定理:
    任意两个面积相等的多边形,它们可以相互拼接得到

    匹克公式:

    AC代码:

    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <bitset>
    #include <cstring>
    #include <iomanip>
    #include <iostream>
    #include <algorithm>
    #define ls (r<<1)
    #define rs (r<<1|1)
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    const ll maxn = 1e6+10;
    const double eps = 1e-8;
    const ll mod = 1e9 + 7;
    const int inf = 0x3f3f3f3f;
    const double pi = acos(-1.0);
    struct point {
        double x, y;
    };
    double cal( point a, point b, point c ) {
        return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
    }
    double cal_area( point a, point b, point c ) {
        return fabs(cal(a,b,c)/2);
    }
    int main() {
        ios::sync_with_stdio(0);
        point a, b, c;
        a.x = a.y = 0;
        ll n, m;
        while( cin >> n >> m ) {
            cin >> b.x >> b.y >> c.x >> c.y;
            double s1 = 1.0*n*m/2.0 - 1;
            double s2 = cal_area(a,b,c);
            if( s1 == s2 ) {
                cout << "Yes" << endl;
            } else {
                cout << "No" << endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    62. Unique Paths
    24. Swap Nodes in Pairs
    83. Remove Duplicates from Sorted List
    21. Merge Two Sorted Lists
    141. Linked List Cycle
    268. Missing Number
    191. Number of 1 Bits
    231. Power of Two
    9. Palindrome Number
    88. Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/l609929321/p/9529931.html
Copyright © 2011-2022 走看看