poj2398
题解:
计算几何入门题
对每个二分最近的在它右边的杆子
如何判断一个杆子在它右边呢
计算机判断这些要更善于利用点积和叉积
如果叉积为正代表在顺时针方向叉积为负在逆时针
发现要在struct里面重载运算符和struct调用struct
就必须要
Point() {}
Point(int x1,int y1)
{
x=x1; y=y1;
}
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
#define mid ((h+t)>>1)
#define ll long long
const int N=1e4;
int n,m,x1,y1,x2,y2,x,y,ans[N],num[N];
struct Point{
int x,y;
Point() {}
Point(int x1,int y1)
{
x=x1; y=y1;
}
Point operator +(const Point &b) const
{
return Point(x+b.x,y+b.y);
}
Point operator -(const Point &b) const
{
return Point(x-b.x,y-b.y);
}
int operator *(const Point &b) const
{
return x*b.x+y*b.y;
}
int operator ^(const Point &b) const
{
return x*b.y-y*b.x;
}
};
struct Line{
Line(){}
Point s,e;
Line(Point s1,Point e1)
{
s=s1,e=e1;
}
}l[N];
bool cmp(Line x,Line y)
{
return x.s.x<y.s.x;
}
IL bool check(Line x,Point y)
{
return ((y-x.s)^(x.e-x.s))<?:;
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
while (cin>>n&&n)
{
cin>>m>>x1>>y1>>x2>>y2;
rep(i,,n)
{
cin>>x>>y;
l[i]=Line(Point(x,y1),Point(y,y2));
}
n++;
l[n]=Line(Point(x2,y1),Point(x2,y2));
sort(l+,l+n+,cmp);
me(ans); me(num);
while (m--)
{
cin>>x>>y;
Point p=Point(x,y);
int h=,t=n;
while (h<t)
{
if (check(l[mid],p)) t=mid; else h=mid+;
}
ans[h]++;
}
rep(i,,n) if (ans[i]>) num[ans[i]]++;
cout<<"Box"<<endl;
rep(i,,n)
if (num[i]>) cout<<i<<": "<<num[i]<<endl;
}
return ;
}
poj2398的更多相关文章
- poj2398 Toy Storage 计算几何,叉积,二分
poj2398 Toy Storage 链接 poj 题目大意 这道题的大概意思是先输入6个数字:n,m,x1,y1,x2,y2.n代表卡片的数量,卡片竖直(或倾斜)放置在盒内,可把盒子分为n+1块区 ...
- [POJ2398]Toy Storage(计算几何,二分,判断点在线段的哪一侧)
题目链接:http://poj.org/problem?id=2398 思路RT,和POJ2318一样,就是需要排序,输出也不一样.手工画一下就明白了.注意叉乘的时候a×b是判断a在b的顺时针还是逆时 ...
- poj2398计算几何叉积
Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing ...
- POJ2398【判断点在直线哪一侧+二分查找区间】
题意:同POJ2318 #include<algorithm> #include<cstdio> #include<cstdlib> #include<cst ...
- POJ2398(KB13-B 计算几何)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5968 Accepted: 3573 Descr ...
- POJ-2398
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4243 Accepted: 2517 Descr ...
- [poj2398]Toy Storage
接替关键:和上题类似,输出不同,注意输入这道题需要排序. #include<cstdio> #include<cstring> #include<algorithm> ...
- ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)
POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
随机推荐
- hibernate框架学习第五天:数据查询、投影等
复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...
- LOJ 6277-6280 数列分块入门 1-4
数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 直接分块+tag即可 #include <bits/stdc++.h ...
- ubuntu 安装 库文件
ubuntu 16.4 安装freeradius 时,缺少库文件 libtalloc, 使用命令: sudo apt-get install libtalloc 发现找不到库文件 libtallo ...
- Gitbook
2017年9月13日 17:12:20 星期三 gitbook 可以将markdown格式的文件编译成html格式 放在当前目录里的_book目录里(需要手动创建, 也可以指定编译后的html文件放到 ...
- javascript for循环 日期 select
2016年12月28日 20:01:54 星期三 html: <a href="aaaa">AAAA</a> <a href="bbbb&q ...
- Kendo ui 入门知识点
1. Kendo的继承 varPerson= kendo.Class.extend({...}); var person = new person(); var Parent = kendo.Clas ...
- scp命令:远程复制粘贴文件
文章链接:https://www.cnblogs.com/webnote/p/5877920.html scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有 ...
- android经典源码,很不错的开源框架
高仿最美应用项目源码 项目介绍 这是仿最美应用开发的基于mvp+rxjava+retrofit的项目,很值得学 github地址: https://github.com/JJOGGER/Beaut ...
- 2018 github热门项目
github流行的几个项目,我们来学习一下. 1. developer-roadmap-chinese image.png 项目简介:2018年web程序员路线中文版, 这个仓库里包含了一些前端,后端 ...
- Java中数据类型默认转换和强制类型转换
默认转换: a:由低到高一次为:(byte short char )---int ---long ---float --- double b:注意:byte short char ...