poj 2318 TOYS & poj 2398 Toy Storage (叉积)
题意:有一个矩形盒子,盒子里有一些木块线段。而且这些线段坐标是依照顺序给出的。
有n条线段,把盒子分层了n+1个区域,然后有m个玩具。这m个玩具的坐标是已知的,问最后每一个区域有多少个玩具
分析:从左往右。直到推断玩具是否在线段的逆时针方向为止。这个就须要用到叉积,当然能够用二分查找优化。
叉积:已知向量a(x1,y1),向量b(x2,y2),axb=x1*y2-x2*y1,
若axb>0,a在b的逆时针方向,若axb<0,则a在b的顺时针方向
注:每组数据后要多空一行
#include<stdio.h>
#include<string.h>
int chaji(int x1,int y1,int x2,int y2)
{
return x1*y2-x2*y1;
}
int main()
{
int u[5010],l[5010],x,y,x1,y1,x2,y2,m,n,i,j,s[5010];
while(scanf("%d",&n)!=EOF){
if(n==0)
break;
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
for(i=0;i<n;i++)
scanf("%d%d",&u[i],&l[i]);
u[n]=l[n]=x2; //将最后一个线段加上
memset(s,0,sizeof(s));
for(i=0;i<m;i++){
scanf("%d%d",&x,&y);
for(j=0;j<=n;j++)
if(chaji(u[j]-l[j],y1-y2,x-l[j],y-y2)>0){ //叉积推断
s[j]++;
break;
}
}
for(j=0;j<=n;j++)
printf("%d: %d\n",j,s[j]);
printf("\n");
}
return 0;
}
意思与上题一样。仅仅只是给出的线段乱序的,所以须要排序,
输出也有点不同,须要输出有玩具1-m个的区间有多少个,按顺序输出
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct point
{
int l,u;
}p[1010];
int chaji(int x1,int y1,int x2,int y2)
{
return x1*y2-x2*y1;
}
int cmp(struct point a,struct point b)
{
if(a.l!=b.l)
return a.l<b.l;
return a.u<b.u;
}
int main()
{
int x,y,x1,y1,x2,y2,m,n,i,j,s[1010],a[1010];
while(scanf("%d",&n)!=EOF){
if(n==0)
break;
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
for(i=0;i<n;i++)
scanf("%d%d",&p[i].u,&p[i].l);
p[n].u=p[n].l=x2;
sort(p,p+n+1,cmp); //对线段排序
memset(s,0,sizeof(s));
memset(a,0,sizeof(a));
for(i=0;i<m;i++){
scanf("%d%d",&x,&y);
for(j=0;j<=n;j++)
if(chaji(p[j].u-p[j].l,y1-y2,x-p[j].l,y-y2)>0){
s[j]++;
break;
}
}
for(j=0;j<=n;j++)
a[s[j]]++;
printf("Box\n");
for(i=1;i<=n;i++)
if(a[i])
printf("%d: %d\n",i,a[i]);
}
return 0;
}
poj 2318 TOYS & poj 2398 Toy Storage (叉积)的更多相关文章
- 【解题报告】PKU 2318 TOYS AND PKU 2398 Toy Storage
题目连接: http://poj.org/problem?id=2318 http://poj.org/problem?id=2398 两题类似的题目,2398是2318的升级版. 题目大概是 ...
- POJ 2318 TOYS(点与直线的关系 叉积&&二分)
题目链接 题意: 给定一个矩形,n个线段将矩形分成n+1个区间,m个点,问这些点的分布. 题解: 思路就是叉积加二分,利用叉积判断点与直线的距离,二分搜索区间. 代码: 最近整理了STL的一些模板,发 ...
- POJ 2318 TOYS && POJ 2398 Toy Storage(几何)
2318 TOYS 2398 Toy Storage 题意 : 给你n块板的坐标,m个玩具的具体坐标,2318中板是有序的,而2398无序需要自己排序,2318要求输出的是每个区间内的玩具数,而231 ...
- poj 2398 Toy Storage(计算几何)
题目传送门:poj 2398 Toy Storage 题目大意:一个长方形的箱子,里面有一些隔板,每一个隔板都可以纵切这个箱子.隔板将这个箱子分成了一些隔间.向其中扔一些玩具,每个玩具有一个坐标,求有 ...
- POJ 2318 TOYS(叉积+二分)
题目传送门:POJ 2318 TOYS Description Calculate the number of toys that land in each bin of a partitioned ...
- 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage
题目传送门 题意:POJ 2318 有一个长方形,用线段划分若干区域,给若干个点,问每个区域点的分布情况 分析:点和线段的位置判断可以用叉积判断.给的线段是排好序的,但是点是无序的,所以可以用二分优化 ...
- 向量的叉积 POJ 2318 TOYS & POJ 2398 Toy Storage
POJ 2318: 题目大意:给定一个盒子的左上角和右下角坐标,然后给n条线,可以将盒子分成n+1个部分,再给m个点,问每个区域内有多少各点 这个题用到关键的一步就是向量的叉积,假设一个点m在 由ab ...
- POJ 2398 - Toy Storage 点与直线位置关系
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5439 Accepted: 3234 Descr ...
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3146 Accepted: 1798 Descr ...
随机推荐
- Android 计算view 的高度
上午在做一个QuickAction里嵌套一个ListView,在Demo运行没事,结果引入到我的项目里,发现我先让它在Button上面,结果是无视那个Button的高度,这很明显,就是那个Button ...
- COMMIT - 提交当前事务
SYNOPSIS COMMIT [ WORK | TRANSACTION ] DESCRIPTION 描述 COMMIT 提交当前事务. 所有事务的更改都将为其他事务可见,而且保证当崩溃发生时的可持续 ...
- log4net小记
log4net添加: Install-Package Log4net log4net.config配置: <?xml version="1.0" encoding=" ...
- PHP 中 include() 与 require() 的区别说明
引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); . ...
- A7. JVM 垃圾回收收集器(GC 收集器)
[概述] 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java 虚拟机规范中对垃圾收集器应该如何实现没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾处理器都可能会 ...
- 趣味ACM题——圣骑士的斩杀
题目来源于山东省第七届ACM大学生程序设计竞赛(Execution of Paladin) 题目描述 鱼人是炉石里的一支强大种族,在探险者协会里,圣骑士有了一张新牌,叫亡者归来,效果是召唤本轮游戏中7 ...
- [Python3网络爬虫开发实战] 4-解析库的使用
上一章中,我们实现了一个最基本的爬虫,但提取页面信息时使用的是正则表达式,这还是比较烦琐,而且万一有地方写错了,可能导致匹配失败,所以使用正则表达式提取页面信息多多少少还是有些不方便. 对于网页的节点 ...
- Mysql:零散记录
limit用法 查询第4行记录 select * from tablename limit 3,1; limit 3,1:截取第3行加1行的数据 查询第6-15行 select * from tabl ...
- 杭电1722 Cake (分蛋糕)
#include<cstdio> int f(int m,int n) { ) return n; else return f(n,m%n); } int main() { int m,n ...
- Uva 12657 移动盒子(双向链表)
题意: 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.可以执行以下4种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y右 ...