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 ...
随机推荐
- POI Excel解析
Maven 引入POI <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&l ...
- 2.浅析Hadoop之YARN
YARN也是主从架构,主节点是ResourceManager,从节点是NodeManager,是一种资源分配及任务管理的组件 针对每个任务还有ApplicationMaster应用管理者和Contai ...
- gsap
TweenMax借助于css,轻量级的js库 下面是简单的demo <!DOCTYPE html> <html lang="en"> <head> ...
- Android 多个activity之间的共享数据
最近打算做一个时间助手,一个service监听课表信息.课表信息可以通过另外的activity来设置,所以这里就涉及到了数据的同步问题.我设置后的信息必须同步到监听的信息去. 在java中我们用全局变 ...
- select * from pet where species regexp '^c';
select * from pet where species regexp '^c';
- 腾讯云微信小程序域名变更指南
1 . 将域名添加到云解析里面, 将解析的地址指向已有的小程序负载均衡地址: https://console.qcloud.com/cns 将域名添加到解析列表 添加成功之后,点击解析按钮,添加二级域 ...
- Jquery的部分插件
jQuery Easing:jQuery 动画效果扩展 jQuery Migrate:jQuery 应用迁移辅助插件Modernizr:专为HTML5和CSS3开发的功能检测类库jQuery Flex ...
- gitlab 邮件服务器配置
一.修改 /etc/gitlab/gitlab.rb 文件,添加邮件服务器信息 SMTP settings 例如163 邮件服务器 external_url 'http://你的IP地址或域名' ## ...
- Android开发学习之TabView选项卡具体解释 -- 基于Android4.4
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/he90227/article/details/24474197 直接上代码 -- 基于Android ...
- 20165322 实验三 敏捷开发与XP实践
实验三 敏捷开发与XP实践 安装alibaba 插件,解决代码中的规范问题 根据老师的教程:打开Settings ->Plugins -> Browse repositories...在搜 ...