zoukankan      html  css  js  c++  java
  • 18.12.25 POJ 1228 Grandpa's Estate

    描述

    Being the only living descendant of his grandfather, Kamran the Believer inherited all of the grandpa's belongings. The most valuable one was a piece of convex polygon shaped farm in the grandpa's birth village. The farm was originally separated from the neighboring farms by a thick rope hooked to some spikes (big nails) placed on the boundary of the polygon. But, when Kamran went to visit his farm, he noticed that the rope and some spikes are missing. Your task is to write a program to help Kamran decide whether the boundary of his farm can be exactly determined only by the remaining spikes.输入The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains an integer n (1 <= n <= 1000) which is the number of remaining spikes. Next, there are n lines, one line per spike, each containing a pair of integers which are x and y coordinates of the spike.

    输出

    There should be one output line per test case containing YES or NO depending on whether the boundary of the farm can be uniquely determined from the input.

    样例输入

    1
    6 
    0 0
    1 2
    3 4
    2 0
    2 4 
    5 0
    

    样例输出

    NO

    来源

    Tehran 2002 Preliminery

    题解

      1 #include <iostream>
      2 #include <string.h>
      3 #include <algorithm>
      4 #include <stack>
      5 #include <string>
      6 #include <math.h>
      7 #include <queue>
      8 #include <stdio.h>
      9 #include <string.h>
     10 #include <set>
     11 #include <vector>
     12 #define maxn 1005
     13 #define inf 999999
     14 using namespace std;
     15 
     16 int n;
     17 struct node {
     18     int x, y, idx;
     19 }spike[maxn];
     20 bool operator <(node a, node b) {
     21     if (a.x == b.x)
     22         return a.y < b.y;
     23     return a.x < b.x;
     24 }
     25 int bao[maxn], c = 0;
     26 bool in[maxn];
     27 bool vis[maxn];
     28 
     29 void solve() {
     30     deque<node>all;
     31     all.push_back(spike[1]), all.push_back(spike[2]);
     32     for (int i = 3; i <= n; i++) {
     33         while (1) {
     34             int size = all.size();
     35             if (size <= 1) {
     36                 all.push_back(spike[i]);
     37                 break;
     38             }
     39             node t = all[size-1],u = all[size-2];
     40             node ut, ta;
     41             ut.x = t.x - u.x; ut.y = t.y - u.y;
     42             ta.x = spike[i].x - t.x; ta.y = spike[i].y - t.y;
     43             int tmp = ut.x*ta.y - ut.y*ta.x;
     44             if (tmp < 0) {
     45                 in[all.back().idx] = false;
     46                 all.pop_back();
     47             }
     48             else {
     49                 if (tmp == 0)
     50                     in[all.back().idx] = true;
     51                 all.push_back(spike[i]);
     52                 break;
     53             }
     54         }
     55     }
     56     while (!all.empty()) {
     57         bao[++c] = all.front().idx;
     58         vis[bao[c]] = true;
     59         all.pop_front();
     60     }
     61     for (int i = 1; i <= c-1; i++) {
     62         if (in[bao[i]] ==false&& in[bao[i + 1]]==false) {
     63             printf("NO
    ");
     64             return;
     65         }
     66     }
     67     all.push_back(spike[n]), all.push_back(spike[n-1]);
     68     for (int i = n-2; i >= 1; i--) {
     69         while (1) {
     70             int size = all.size();
     71             if (size <= 1) {
     72                 all.push_back(spike[i]);
     73                 break;
     74             }
     75             node t = all[size - 1], u = all[size - 2];
     76             node ut, ta;
     77             ut.x = t.x - u.x; ut.y = t.y - u.y;
     78             ta.x = spike[i].x - t.x; ta.y = spike[i].y - t.y;
     79             int tmp = ut.x*ta.y - ut.y*ta.x;
     80             if (tmp < 0) {
     81                 in[all.back().idx] = false;
     82                 all.pop_back();
     83             }
     84             else {
     85                 if (tmp == 0)
     86                     in[all.back().idx] = true;
     87                 all.push_back(spike[i]);
     88                 break;
     89             }
     90         }
     91     }
     92     all.pop_front();
     93     c = 0;
     94     while (!all.empty()) {
     95         bao[++c] = all.front().idx;
     96         all.pop_front();
     97         if (vis[bao[c]]&&!all.empty()) {
     98             printf("NO
    ");
     99             return;
    100         }
    101     }
    102     for (int i = 1; i <= c-1; i++) {
    103         if (in[bao[i]] ==false&& in[bao[i + 1]]==false) {
    104             printf("NO
    ");
    105             return;
    106         }
    107     }
    108     printf("YES
    ");
    109 }
    110 
    111 void init() {
    112     scanf("%d", &n);
    113     memset(in, 0, sizeof(in));
    114     memset(vis, 0, sizeof(vis));
    115     c = 0;
    116     for (int i = 1; i <= n; i++) {
    117         scanf("%d%d", &spike[i].x, &spike[i].y);
    118         spike[i].idx = i;
    119     }
    120     sort(spike + 1, spike + 1 + n);
    121     solve();
    122 }
    123 
    124 int main() {
    125     int kase;
    126     scanf("%d", &kase);
    127     while(kase--)
    128         init();
    129     return 0;
    130 }
    View Code

    做这题的时候我还觉得计算几何没什么大不了的……

    直到我看到了后两道……

    我不该在课上做其他科作业的……

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    x86 hook跳转内存地址转换计算框架
    win10180317134配合VS2017搭建WDK驱动开发环境
    C/C++字节特征码转换自动格式化文本工具算法源码
    jar包直接拷贝到WEBINF/lib下和以userLibrary引入的区别
    java.io.IOException: Cannot rename original file to %TOMCAT_HOME%\conf\tomcatusers.xml.old
    Tomcat5 和 Tomcat6 类加载器架构
    Tomcat version * only supports J2EE * Web modules
    tomcat启动时报错:org.apache.catalina.core.AprLifecycleListener init
    tomcat 不能正常启动,双击 startup.bat 一闪而过
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/yalphait/p/10174838.html
Copyright © 2011-2022 走看看