Hrbustoj 1429 二分+计算几何
http://www.bubuko.com/infodetail-1121744.html 在这个上面学习了方法 如果要判断巨量的点 就应该使用二分法
思路是先从a[1] a[n] a[2]来判断是否可能在图形内 如果这个都通不过就不用再判断下边的了
然后从 2 到 n 开始二分 确定两个相邻向量 使寻找点必在这两个向量的夹角里
然后就是点是否在三角形内了 由于已经判断了两条边了 最后只判断第三条即可
一开始 二分的while条件写的是r-l!=0 最后得到的效果是 点必定在r l向量的夹角内
然而超时 很不理解QAQ
后来学习了网上的办法 设定条件l<r 这样最后得到的l其实是等于r的 点在l l-1的夹角内
学习的方法里提到了一点 位运算比乘除运算快非常多
分别尝试了一下 位运算 485ms 正常乘除 541ms
自己写的代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
struct point
{
double x,y;
};
double cross(point a,point b,point c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
int main(){
int n;
while(~scanf("%d",&n))
{
point a[n+1];
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}
bool ok=true;
int m;
scanf("%d",&m);
point p[m];
for(int i=0;i<m;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y); }
for(int i=0;i<m;i++)
{
if(cross(a[1],p[i],a[2])<=0||cross(a[1],a[n],p[i])<=0)
{
ok=false;
break;
}
int l=2;
int r=n;
int m;
while(l<r)
{
m=(r+l)/2;/// m=(r+l)>>1 更快一些
if(cross(a[1],p[i],a[m])<=0)
{
r=m;
}
else l=m+1;
}
if(cross(a[l],p[i],a[l-1])>=0)
{
ok=false;
break;
}
} if(ok==true)
printf("YES\n");
else printf("NO\n");
}
}
Hrbustoj 1429 二分+计算几何的更多相关文章
- hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
凸多边形 Time Limit: 2000 MS Memory Limit: 65536 K Total Submit: 130(24 users) Total Accepted: 40(1 ...
- codeforces 590B B. Chip 'n Dale Rescue Rangers(二分+计算几何)
题目链接: B. Chip 'n Dale Rescue Rangers time limit per test 1 second memory limit per test 256 megabyte ...
- POJ - 1905 Expanding Rods(二分+计算几何)
http://poj.org/problem?id=1905 题意 一根两端固定在两面墙上的杆,受热后变弯曲.求前后两个状态的杆的中点位置的距离 分析 很明显需要推推公式. 由②的限制条件来二分角度, ...
- Codeforces 8D Two Friends 三分+二分+计算几何
题目链接:点击打开链接 题意:点击打开链接 三分house到shop的距离,二分这条斜边到cinema的距离 #include<stdio.h> #include<string.h& ...
- POJ 2002 二分 计算几何
根据正方形对角的两顶点求另外两个顶点公式: x2 = (x1+x3-y3+y1)/2; y2 = (x3-x1+y1+y3)/2; x4= (x1+x3+y3-y1)/2; y4 = (-x3+x1+ ...
- 【POJ】【3525】Most Distant Point from the Sea
二分+计算几何/半平面交 半平面交的学习戳这里:http://blog.csdn.net/accry/article/details/6070621 然而这题是要二分长度r……用每条直线的距离为r的平 ...
- PLAN OF HEOI(unfinished)
Au:整体二分/计算几何/多项式/fwtAg:可持久化重量平衡树/线段树分治/线段树合并/最短路树/最短路DAGCu:三分Up:博弈论/置换群/杜教筛/矩阵树定理/BSGS/动态树分治/网络流(线性规 ...
- 【POJ】2318 TOYS ——计算几何+二分
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10281 Accepted: 4924 Description ...
- 洛谷CF1071E Rain Protection(计算几何,闵可夫斯基和,凸包,二分答案)
洛谷题目传送门 CF题目传送门 对于这题,我无力吐槽. 虽然式子还是不难想,做法也随便口胡,但是一些鬼畜边界情况就是判不对. 首先显然二分答案. 对于每一个雨滴,它出现的时刻我们的绳子必须落在它上面. ...
随机推荐
- Linux vim 底下显示行号
使用 vim /etc/vimrc 然后进入之后再 set ruler" show the cursor position all the time 底下再加上 set nu 保存退出 :w ...
- php 指针遍历、预定义数组和常用函数
<?php /*//定义 $attr = array(1,2,3); $attr[] = 1; $attr = array("one"=>"hello&quo ...
- Andorid中的HAL
参考文章: http://blog.csdn.net/luoshengyang/article/details/6567257
- EF架构~为EF DbContext生成的实体添加注释(T5模板应用)(转载)
转载地址:http://www.newlifex.com/showtopic-1072.aspx 最近新项目要用Entity Framework 6.x,但是我发现从数据库生成模型时没有生成字段的注释 ...
- oracle 10g 学习之函数和存储过程(12)
一.函数 1. 函数的 helloworld: 返回一个 "helloworld--!" 的字符串 create or replace function helloworld re ...
- python联接主流SQL的类库个人收藏
我现在主要是用以下这个类库来分别连接oracle,postgresql,mysql,mssql的. PyMySQL,pymssql,cx_Oracle,psycopg2 收藏 一下.. https:/ ...
- HDU 4349 Xiao Ming's Hope lucas定理
Xiao Ming's Hope Time Limit:1000MS Memory Limit:32768KB Description Xiao Ming likes counting nu ...
- MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...
- 【poi xlsx报错】使用POI创建xlsx无法打开
如果使用的XSSFWorkbook创建的xls,打开的时候会有这样的提示: 这样 XSSFWorkbook 和HSSFWorkbook的区别. HSSF - 提供读写Microsoft Excel X ...
- 16.2.13 asp.net 学习随笔
using System.Data.SqlClient;//连接数据库必须的 using System.Configuration; CommandType所在的命名空间 system.data; P ...