• FZUACM Problem 1120 A Pilot in Danger!


    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    using namespace std;
    //2013-06-05 17:19:28 	Accepted 	1120 	GNU C++		0 ms 	856KB 	2352B 
    const double eps = 1e-8;
    int dcmp(double x) {
        if(fabs(x) < eps) return 0;
        if(x > 0) return 1;
        return -1;
    }
    
    struct point {
        double x, y;
        point() {}
        point(double a, double b) : x(a), y(b) {}
        friend point operator - (const point &a, const point &b) {
           return point(a.x-b.x, a.y-b.y);
        }
        friend point operator + (const point &a, const point &b) {
            return point(a.x+b.x, a.y+b.y);
        }
    };
    
    double det(const point &a, const point &b) {
       return a.x * b.y - a.y * b.x;
    }
    
    double dot(const point &a, const point &b) {
        return a.x*b.x + a.y*b.y;
    }
    
    bool PointOnSegment(point p, point s, point t) {
        return dcmp(det(p-s, t-s))==0 && (dcmp(dot(p-s, p-t))<=0);
    }
    const int maxn = 40100;
    //多边形的点顺时针,逆时针都可以。
    struct polygon {
        int n;
        point a[maxn];
        //polygon() {}
        int Point_In(point t) {
            int num = 0, i, d1, d2, k;
            a[n] = a[0];
            for(i = 0; i < n; i++) {
                if(PointOnSegment(t, a[i], a[i+1])) return 2;
                k = dcmp(det(a[i+1]-a[i], t-a[i]));
                d1 = dcmp(a[i].y - t.y);
                d2 = dcmp(a[i+1].y - t.y);
                if(k>0 && d1<=0 && d2>0) num++;
                if(k<0 && d2<= 0 && d1>0) num--;
            }
            if(num!=0) return 1;//在多边形内。
            return 0;
        }
    };
    
    polygon v;
    int main()
    {
        int n;
        int p, q;
        int num = 0;
        while(scanf("%d", &n) != EOF) {
            if(n==0) break;
            v.n = n;
            for(int i = 0; i < n; i++) {
                scanf("%lf%lf", &v.a[i].x, &v.a[i].y);
            }
            scanf("%d%d", &p, &q);
            int secret = (p-1)*(q-1)/2;
            int res = v.Point_In(point(0, 0));
            printf("Pilot %d\n",  ++num);
            if(res==1) {
                printf("The pilot is in danger!\n");
                printf("The secret number is %d.\n", secret);
            } else {
                printf("The pilot is safe.\n");
            }
            cout << endl;
        }
    }
    


  • 相关阅读:
    python-面向对象-05_面向对象封装案例 II
    python-面向对象-06_私有属性和私有方法
    python-面向对象-07_继承
    python-面向对象-08_多态
    python-面向对象-09_类属性和类方法
    CentOS 7 安装
    lnmp 一键搭建脚本
    shell 函数与内置变量
    linux无敌权限之chattr
    linux运维配置讲解--sshd-config
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3119852.html
Copyright © 2020-2023  润新知