POJ 2398

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int Max=1050;

struct e{
	int x1,x2;
}edge[Max];
struct c{
	int x,y;
}cal[4];

int n,m;
int X1,Y1,X2,Y2;
int ans[Max],co[Max];
int u,v;

bool cmp(struct e A,struct e B){
	if(A.x1<B.x1) return true;
	return false;
}

void init(){
	for(int i=0;i<=n;i++){
		ans[i]=0; co[i]=0;
	}
}

bool in(){
	if(u>=X1&&u<=X2&&v>=Y2&&v<=Y1)
	return true;
	return false;
}

__int64 multi(int i){
	int j=i+1;
	if(j==4) j=0;
	return (__int64)(u-cal[i].x)*(__int64)(cal[j].y-cal[i].y)-(__int64)(v-cal[i].y)*(__int64)(cal[j].x-cal[i].x);
}

bool judge(int mid){
	__int64 pre,now;
	cal[0].x=edge[mid].x1; cal[0].y=Y1;
	cal[1].x=X2; cal[1].y=Y1;
	cal[2].x=X2; cal[2].y=Y2;
	cal[3].x=edge[mid].x2; cal[3].y=Y2;
	for(int i=0;i<4;i++){
		now=multi(i);
		if(i>0){
			if(pre*now<0)
			return false;
		}
		pre=now;
	}
	return true;
}

void slove(){
	int low=0,high=n;
	int anst;
	while(low<=high){
		int mid=(low+high)/2;
		if(judge(mid)){
			anst=mid; low=mid+1;
		}
		else high=mid-1;
	}
	int k=ans[anst];
	co[k]--;
	ans[anst]++;
	co[k+1]++;
}

int main(){
	while(scanf("%d",&n)!=EOF){
		if(n==0) break;
		scanf("%d%d%d%d%d",&m,&X1,&Y1,&X2,&Y2);
		init();
		co[0]=m;
		edge[0].x1=X1,edge[0].x2=X1;
		for(int i=1;i<=n;i++){
			scanf("%d%d",&edge[i].x1,&edge[i].x2);
		}
		sort(edge,edge+n+1,cmp);
		for(int i=0;i<m;i++){
			scanf("%d%d",&u,&v);
			if(in())
				slove();
		}
		printf("Box\n");
		for(int i=1;i<=m;i++){
			if(co[i]){
				printf("%d: %d\n",i,co[i]);
			}
		}
	}
	return 0;
}

  

POJ 2398,布布扣,bubuko.com

时间: 2024-10-10 16:46:24

POJ 2398的相关文章

POJ 2398 - Toy Storage

Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5439   Accepted: 3234 Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box

POJ 2398 计算几何+二分+排序

Toy Storage Time Limit: 1000MS  Memory Limit: 65536K Total Submissions: 3953  Accepted: 2334 Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box t

POJ 2398 Toy Storage(叉积+二分)

题目链接:POJ 2398 Toy Storage 之前做的类似题目:POJ 2318 TOYS [题意]跟之前做的POJ 2318差不多额,给你一个矩形,有被若干直线分成N个格子,给出M个点(玩具)的坐标,问你放有t个玩具的格子的个数. [思路]其实跟POJ 2318差不多,利用叉积+二分,但是本题中直线的输入不是按顺序的,要进行排序,才能做二分.开始写错了构造函数,然后就一直不对啊,看来C++的学习之路还很远啊. 1 /* 2 ** POJ 2398 Toy Storage 3 ** Cre

poj 2398 计算几何

1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <algorithm> 5 using namespace std; 6 7 struct point{ 8 int x,y; 9 }; 10 11 struct line{ 12 point a,b; 13 }; 14 line lline[5005]; 15 16 int cnt[5005]; 17 int re

poj 2318 TOYS &amp; poj 2398 Toy Storage (叉积)

链接:poj 2318 题意:有一个矩形盒子,盒子里有一些木块线段,并且这些线段坐标是按照顺序给出的, 有n条线段,把盒子分层了n+1个区域,然后有m个玩具,这m个玩具的坐标是已知的,问最后每个区域有多少个玩具 分析:从左往右,直到判断玩具是否在线段的逆时针方向为止,这个就需要用到叉积,当然可以用二分查找优化. 叉积:已知向量a(x1,y1),向量b(x2,y2),axb=x1*y2-x2*y1, 若axb>0,a在b的逆时针方向,若axb<0,则a在b的顺时针方向 注:每组数据后要多空一行

POJ 2398 Toy Storage 叉积 和2318基本一样

B - Toy Storage Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2398 Appoint description:  System Crawler  (2016-05-10) Description Mom and dad have a problem: their child, Reza, never puts his

poj 2398 Toy Storage (计算几何,判断点和线段关系)

http://poj.org/problem?id=2398 题意大概是说将一个盒子用n个board分成n+1 部分 然后往里面放toy,给定盒子,board,和toy的坐标 问所有的toy放完后,有多少部分中有t个toy; 简单计算几何 需要判断的是点和直线的关系. 判断 某一点在直线左右侧 左右方向是相对前进方向的,只要指定了前进方向就可以知道左右(比如指定前进方向是从直线的起点到终点).判断点在直线的左侧还是右侧是计算几何里面的一个最基本算法.使用矢量来判断. 定义:平面上的三点P1(x1

poj 2398 Toy Storage 【计算几何】【点和线的关系】

题目链接:http://poj.org/problem?id=2398 题目大意:这次的题目和前一道题目几乎是一样的,不同之处在于这次给出的线不是有顺序的,还有就是输出的时候有一个优化. 基本的分析见我上篇博客:http://blog.csdn.net/u010468553/article/details/39474007 注意sort函数中cmp的编写还有后期数据的整理 #include<iostream> #include<stdio.h> #include<cstrin

POJ 2398 - Toy Storage - [计算几何基础题][同POJ2318]

题目链接:http://poj.org/problem?id=2398 Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box to put his toys in