POJ 2398--Toy Storage(叉积判断,二分找点,点排序)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6534 | Accepted: 3905 |
Description
Reza's parents came up with the following idea. They put cardboard partitions into the box. Even if Reza keeps throwing his toys into the box, at least toys that get thrown into different partitions stay separate. The box looks like this from the top:
We want for each positive integer t, such that there exists a partition with t toys, determine how many partitions have t, toys.
Input
A line consisting of a single 0 terminates the input.
Output
Sample Input
4 10 0 10 100 0
20 20
80 80
60 60
40 40
5 10
15 10
95 10
25 10
65 10
75 10
35 10
45 10
55 10
85 10
5 6 0 10 60 0
4 3
15 30
3 1
6 8
10 10
2 1
2 8
1 5
5 5
40 10
7 9
0
Sample Output
Box
2: 5
Box
1: 4
2: 1
Source
- 题意:给定n条无顺序的边,将一个矩形划分成n+1个区域,再给定m个点,求每个区域各有多少个点,输出将按区域内存在的点的数目进行升序排序。
和POJ2318类似,但是这里的点需要排序,还有输出结果不同 - code:
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
const int MAX = ;
typedef struct point {
int x;
int y;
}point;
typedef struct value {
point start;
point end;
}v;
v edge[MAX];
int sum[MAX], ans[MAX];
int n, m, x1, y11, x2, y2, flag = ,Ui, Li;
point tp;
int Xj, Yj;
bool com(const v t1, const v t2) {
return t1.start.x < t2.start.x;
}
bool com2(const int a, const int b) {
return a < b;
}
int multi(point p1, point p2, point p0) { //判断p1p0和p2p0的关系,<0,p1p0在p2p0的逆时针方向
return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y);
}
void inset(point p) {
int low = , high = n;
while (low <= high) {
int mid = (high + low) / ;
if (multi(p, edge[mid].start, edge[mid].end) < ) /*点p1在边的左侧*/
high = mid - ;
else //点p在边的右侧
low = mid + ;
}
if (multi(p, edge[low-].start, edge[low-].end) < )
sum[low-]++;
else
sum[low]++;
}
int main() {
while (cin>>n && n) {
memset(sum, , sizeof(sum));
memset(ans, , sizeof(ans));
cin >> m >> x1 >> y11 >> x2 >> y2;
for (int i = ; i < n; i++) {
cin >> Ui >> Li;
edge[i].start.x = Ui;
edge[i].start.y = y11;
edge[i].end.x = Li;
edge[i].end.y = y2;
}
edge[n].start.x = x2;
edge[n].start.y = y11;
edge[n].end.x = x2;
edge[n].end.y = y2;
sort(edge, edge + n + , com);
for (int j = ; j < m; j++) {
cin >> Xj >> Yj;
tp.x = Xj;
tp.y = Yj;
inset(tp);
}
for (int i = ; i <= n; i++)
{
if (sum[i] != )
ans[sum[i]]++;
}
cout << "Box" << endl;
for (int i = ; i <= n; i++)
{
if (ans[i] != )
cout << i << ": " << ans[i] << endl;
}
}
return ;
} - 再熟悉一下叉积函数
再熟悉一下叉积函数
int multi(point p1, point p2, point p0) {
return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y);
}
//判断p1p0和p2p0的关系
//结果<0, p1p0在p2p0的逆时针方向,即点p1在p2p0的左侧
//结果>0, p1p0在p2p0的顺时针方向,即点p1在p2p0的右侧
POJ 2398--Toy Storage(叉积判断,二分找点,点排序)的更多相关文章
- poj 2318 TOYS & poj 2398 Toy Storage (叉积)
链接:poj 2318 题意:有一个矩形盒子,盒子里有一些木块线段.而且这些线段坐标是依照顺序给出的. 有n条线段,把盒子分层了n+1个区域,然后有m个玩具.这m个玩具的坐标是已知的,问最后每一个区域 ...
- poj 2398 Toy Storage(计算几何)
题目传送门:poj 2398 Toy Storage 题目大意:一个长方形的箱子,里面有一些隔板,每一个隔板都可以纵切这个箱子.隔板将这个箱子分成了一些隔间.向其中扔一些玩具,每个玩具有一个坐标,求有 ...
- POJ 2318 TOYS && POJ 2398 Toy Storage(几何)
2318 TOYS 2398 Toy Storage 题意 : 给你n块板的坐标,m个玩具的具体坐标,2318中板是有序的,而2398无序需要自己排序,2318要求输出的是每个区间内的玩具数,而231 ...
- POJ 2398 Toy Storage (叉积判断点和线段的关系)
题目链接 Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4104 Accepted: 2433 ...
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3146 Accepted: 1798 Descr ...
- POJ 2398 Toy Storage(叉积+二分)
Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finis ...
- poj 2398 Toy Storage【二分+叉积】
二分点所在区域,叉积判断左右 #include<iostream> #include<cstdio> #include<cstring> #include<a ...
- 向量的叉积 POJ 2318 TOYS & POJ 2398 Toy Storage
POJ 2318: 题目大意:给定一个盒子的左上角和右下角坐标,然后给n条线,可以将盒子分成n+1个部分,再给m个点,问每个区域内有多少各点 这个题用到关键的一步就是向量的叉积,假设一个点m在 由ab ...
- 2018.07.04 POJ 2398 Toy Storage(二分+简单计算几何)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad have a problem: their ch ...
- POJ 2398 - Toy Storage 点与直线位置关系
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5439 Accepted: 3234 Descr ...
随机推荐
- sql查询结果多对多转为一对多返回前端
企业表 ent_EnterpriseArchives 有id,企业名称 entName veh_Vehicle 车辆表,有所属企业id companyId,车辆id,车牌号licPlate 目的是 ...
- Jedis Cluster源码分析
最近一个项目用到Jedis客户端,需要对这个客户端进行改造.看了一下Jedis Cluster源码,做个记录 首先,说核心内容, 在Jedis源码中,关于cluster有个两个重要的map.一个是no ...
- 基于CSS3的3D旋转效果
自从有了html5和css3,好多以前只能想想的华丽效果都可以上手实现了.3D 转换(个人认为3D变换更贴切^)就是其中之一.关于3D转换,可以阅读CSS3 3D transform变换,不过如此,文 ...
- 【代码笔记】JTable 、TableModel的使用3
在java中插入Table,并通过TableModel插入表格初始化状态后,如果需要第一行标题栏进行重命名,直接利用TableModel接口去实现列名修改,在图形显示中是无法实现的. 这里需要用到 J ...
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证.字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数 ...
- Android 解决Glide 加载图片缓慢(第一次加载不出来图片)的Bug
- 【NLP_Stanford课堂】句子切分
依照什么切分句子——标点符号 无歧义的:!?等 存在歧义的:. 英文中的.不止表示句号,也可能出现在句子中间,比如缩写Dr. 或者数字里的小数点4.3 解决方法:建立一个二元分类器: 检查“.” 判断 ...
- jvm 的性能调优
一个描述的比较生动的博客:JVM内存区域划分Eden Space.Survivor Space.Tenured Gen,Perm Gen解释 地址:https://www.cnblogs.com/sg ...
- 一个sql server 实施工程师的反思
自14年开始从事数据库实施,至今(2018-02-16)晃眼间已经四个年头过去了,工作上的能力要求多数能自己解决,可这不应该成为我学习路上的终点.加之总觉得自己对sql 的理解有些浮于表面,所以借着春 ...
- 【Spring实战】—— 7 复杂集合类型的注入
之前讲解了Spring的基本类型和bean引用的注入,接下来学习一下复杂集合类型的注入,例如:List.Set.Map等. 对于程序员来说,掌握多种语言是基本的技能. 我们这里做了一个小例子,程序员们 ...