做完了才发现,好像没有人和我的做法一样的,不过我怎么都觉得我的做法还是挺容易想的。

我的做法是:

把周围的方框按顺时针编号,然后对于每一条边,如果点出现在边的一侧,则把另一侧所有的点加1,这样最后统计最小值+1即可。

离散化一下 O(n)

  1. //
  2. // main.cpp
  3. // poj1066
  4. //
  5. // Created by 陈加寿 on 15/12/30.
  6. // Copyright (c) 2015年 chenhuan001. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <math.h>
  13. #include <algorithm>
  14. using namespace std;
  15.  
  16. struct line
  17. {
  18. int x1,y1;
  19. int x2,y2;
  20. }g[];
  21.  
  22. int save[];
  23.  
  24. int chg(int x,int y)
  25. {
  26. if( y== ) return x;
  27. if( x== ) return +-y;
  28. if( y== ) return + -x;
  29. return +y;
  30. }
  31.  
  32. int main(int argc, const char * argv[]) {
  33. int n;
  34. while( scanf("%d",&n)!=EOF )
  35. {
  36. for(int i=;i<n;i++)
  37. {
  38. scanf("%d%d%d%d",&g[i].x1,&g[i].y1,&g[i].x2,&g[i].y2);
  39. g[i].x1 *= ;
  40. g[i].y1 *= ;
  41. g[i].x2 *= ;
  42. g[i].y2 *= ;
  43. }
  44. double x,y;
  45. scanf("%lf%lf",&x,&y);
  46. x*=;
  47. y*=;
  48. memset(save,,sizeof(save));
  49. //以防万一,还是坐标乘2先
  50. int num=;
  51. for(int i=;i<n;i++)
  52. {
  53. if( chg( g[i].x1,g[i].y1 ) > chg(g[i].x2,g[i].y2) )
  54. {
  55. swap(g[i].x1,g[i].x2);
  56. swap(g[i].y1,g[i].y2);
  57. }
  58.  
  59. int b,d;
  60. b= chg( g[i].x1,g[i].y1 );
  61. d= chg( g[i].x2,g[i].y2 );
  62.  
  63. double p1x,p1y,p2x,p2y;
  64. p1x = g[i].x1-x;
  65. p1y = g[i].y1-y;
  66. p2x = g[i].x2-x;
  67. p2y = g[i].y2-y;
  68.  
  69. if( p1x*p2y - p1y*p2x > )
  70. {
  71. num++;
  72. for(int j=b+;j<=d-;j++) save[j]--;
  73. }
  74. else
  75. {
  76. for(int j=b;j<=d;j++) save[j]++;
  77. }
  78. }
  79. int mi=;
  80. for(int i=;i<;i++) mi = min(mi ,save[i] );
  81. printf("Number of doors = %d\n",mi+num+);
  82. }
  83. return ;
  84. }

poj1066(叉乘的简单应用)的更多相关文章

  1. POJ 2318 TOYS (叉乘判断)

    <题目链接> 题目大意: 给出矩形4个点和n个挡板俩顶点的位置,这n个挡板将该矩形分成 n+1块区域,再给你m个点的坐标,然你输出每个区域内有几个点. 解题思路: 用叉乘即可简单判断点与直 ...

  2. 优先队列之二叉堆与d-堆

    二叉堆简介 平时所说的堆,若没加任何修饰,一般就是指二叉堆.同二叉树一样,堆也有两个性质,即结构性和堆序性.正如AVL树一样,对堆的以此操作可能破坏者两个性质中的一个,因此,堆的操作必须要到堆的所有性 ...

  3. 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)

    目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...

  4. Treap入门(转自NOCOW)

    Treap 来自NOCOW Treap,就是有另一个随机数满足堆的性质的二叉搜索树,其结构相当于以随机顺序插入的二叉搜索树.其基本操作的期望复杂度为O(log n). 其特点是实现简单,效率高于伸展树 ...

  5. luvit 初尝鲜

    官网:http://luvit.io/ Luvit is an attempt to do something crazy by taking node.js' awesome architectur ...

  6. Android事件传递机制详解及最新源码分析——ViewGroup篇

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 在上一篇<Android事件传递机制详解及最新源码分析--View篇>中,详细讲解了View事件的传递机制,没掌握或者掌握不扎实的小伙伴 ...

  7. 深入浅出数据结构C语言版(15)——优先队列(堆)

    在普通队列中,元素出队的顺序是由元素入队时间决定的,也就是谁先入队,谁先出队.但是有时候我们希望有这样的一个队列:谁先入队不重要,重要的是谁的"优先级高",优先级越高越先出队.这样 ...

  8. Tushare模块

    .TuShare简介和环境安装 TuShare是一个著名的免费.开源的python财经数据接口包.其官网主页为:TuShare -财经数据接口包.该接口包如今提供了大量的金融数据,涵盖了股票.基本面. ...

  9. 1.tushare模块的应用

    tushare模块的应用 今日概要 TuShare简介和环境安装 TuShare的应用 今日详情 一.TuShare简介和环境安装 TuShare是一个著名的免费.开源的python财经数据接口包.其 ...

随机推荐

  1. jmeter的dubbo插件

    调研是否可以把dubbo压测的一些公共配置变成变量.可以调控 Dubbo接口如何在Jmeter中测试,自研Dubbo Plugin for Apache JMeter 最新使用手册参考:https:/ ...

  2. Unitity 常用工具类

    ylbtech-Unitity_C#: Unitity 常用代码 1.A,效果图返回顶部   1.B,源代码返回顶部 1,日期字符串 using System; using System.Xml; / ...

  3. Linux用ps命令查找进程PID再用kill命令终止进程的方法

    使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即 ...

  4. 五个常用的Linux监控脚本代码

    bash中 2>&1 & 的解释 1.首先,bash中0,1,2三个数字分别代表STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO,即标准输入(一般 ...

  5. ECSHOP搜索框文字点击消失

    <input name="keywords" type="text" id="keyword" value="黄山金银币&q ...

  6. [Algorithm] Median Maintenance algorithm implementation using TypeScript / JavaScript

    The median maintenance problem is a common programming challenge presented in software engineering j ...

  7. EffectiveJava(18)接口优先于抽象类

    ***接口和抽象类同样可以用来定义多个实现的类型,然而,接口通常是最佳途径.*** 这条规则有个例外 – 当演变的容易性比灵活性和功能性更为重要的时候,应该用抽象来定义类型 ,但前提是必须理解并且可以 ...

  8. python 赋值 深浅拷贝

    深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...

  9. xtrabackup详解

    xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份 ...

  10. int a[3];中a+1与&amp;a+1差别 -- C

    int a[3]; a 和 &a 的地址一样的. a+1 == a + 1*sizeof(int);跳跃是一个数组元素大小 &a+1 == a + 3*sizeof(int);跳跃是整 ...