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 ** Created by Rayn @@ 2014/05/05
4 */
5 #include <cstdio>
6 #include <cstring>
7 #include <algorithm>
8 using namespace std;
9 const int MAX = 1010;
10 const int INF = 0x3f3f3f3f;
11
12 struct Point {
13 double x, y;
14 Point(double a=0, double b=0): x(a), y(b) {}
15 } dot[MAX];
16
17 struct Line {
18 double up, low;
19 bool operator < (const Line& rhs) const {
20 double x1 = min(up, low);
21 double x2 = min(rhs.up, rhs.low);
22 if(x1 == x2)
23 return max(up, low) < max(rhs.up, rhs.low);
24 else
25 return x1 < x2;
26 }
27 } line[MAX];
28
29 int num[MAX], ans[MAX];
30
31 double Cross(Point A, Point B, Point C)
32 {
33 return (C.x-A.x)*(B.y-A.y)-(B.x-A.x)*(C.y-A.y);
34 }
35 int main()
36 {
37 #ifdef _Rayn
38 freopen("in.txt", "r", stdin);
39 #endif
40
41 int n, m;
42 double x1, y1, x2, y2;
43
44 while(scanf("%d", &n) != EOF && n)
45 {
46 scanf("%d%lf%lf%lf%lf", &m, &x1, &y1, &x2, &y2);
47 //printf("%d %d\n", n, m);
48 for(int i=0; i<n; ++i)
49 {
50 scanf("%lf%lf", &line[i].up, &line[i].low);
51 }
52 sort(line, line+n);
53 line[n].up = line[n].low = x2;
54
55 memset(num, 0, sizeof(num));
56 memset(ans, 0, sizeof(ans));
57 for(int i=0; i<m; ++i)
58 {
59 scanf("%lf%lf", &dot[i].x, &dot[i].y);
60 int left = 0, right = n, mid = 0;
61 while(left <= right)
62 {
63 mid = (left + right) / 2;
64 Point b(line[mid].low, y2);
65 Point c(line[mid].up, y1);
66 if(Cross(dot[i], b, c) > 0)
67 left = mid + 1;
68 else
69 right = mid - 1;
70 }
71 num[left]++;
72 }
73 for(int i=0; i<=n; ++i)
74 {
75 if(num[i])
76 ans[num[i]]++;
77 }
78 printf("Box\n");
79 for(int i=0; i<=n; ++i)
80 {
81 if(ans[i])
82 printf("%d: %d\n", i, ans[i]);
83 }
84 }
85 return 0;
86 }

POJ 2398 Toy Storage(叉积+二分)

时间: 2024-10-17 19:46:45

POJ 2398 Toy Storage(叉积+二分)的相关文章

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【二分+叉积】

二分点所在区域,叉积判断左右 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; const int N=1005; int T,n,m,x1,y1,x2,y2,ans[N],cnt[N]; struct dian { double x,y; dian(double X=0,d

POJ 2398 Toy Storage (叉积判断点和线段的关系)

题目链接 Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4104   Accepted: 2433 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 rectangula

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(计算几何 点线关系)

Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4588   Accepted: 2718 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 2318 TOYS/POJ 2398 Toy Storage

计算几何终于开坑了... 叉积+二分. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 5050 using namespace std; struct point { int x,y; point (int x,int y):x(x),y(y) {} point () {} friend point operator-(point

poj 2398 Toy Storage (计算几何)

A - Toy Storage Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status 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 rec

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