【ACWing】2983. 玩具
题目地址:
https://www.acwing.com/problem/content/description/2986/
计算玩具收纳盒中,每个分区内的玩具数量。约翰的父母有一个烦恼----约翰每次玩完玩具以后总会将玩具乱扔。他们为约翰准备了一个长方形的玩具收纳盒,用来放他的玩具。但是约翰非常调皮,每次都非常随意的将玩具扔进盒子中,使得所有玩具都随意混在一起,这让约翰难以找到他喜欢的玩具。对此,约翰的父母想出了一个对策,用若干个纸板将收纳盒分隔成若干个分区,这样至少扔到不同分区的玩具之间还是能分开的。下面是一个收纳盒的俯视图示例。
你的任务是,每当约翰将玩具扔进收纳盒中时,确定每个分区中有多少个玩具。
输入格式:
本题包含多组测试数据。
对于每组数据,第一行包含666个整数n,m,x1,y1,x2,y2n,m,x_1,y_1,x_2,y_2n,m,x1,y1,x2,y2,表示共有nnn个纸板,mmm个玩具,收纳盒的左上角坐标为(x1,y1)(x_1,y_1)(x1,y1),右下角坐标为(x2,y2)(x_2,y_2)(x2,y2)。
接下来nnn行,每行包含两个整数Ui,LiU_i,L_iUi,Li,表示第iii个纸板的两端点坐标分别为(Ui,y1)(U_i,y_1)(Ui,y1)和(Li,y2)(L_i,y_2)(Li,y2)。数据保证纸板之间不相交,且按照从左至右顺序依次给出。
接下来mmm行,每行包含两个整数Xj,YjX_j,Y_jXj,Yj,表示第jjj个玩具的位置坐标。玩具的给出顺序是随机的。数据保证玩具不会恰好落在纸板上,也不会落在盒子外。
输入由包含单个000的一行结束。
输出格式:
对于每组数据,输出n+1n+1n+1行。
nnn个纸板将收纳盒划分为了n+1n+1n+1个分区,从左到右编号为0∼n0∼n0∼n。
按照分区编号从小到大的顺序,每行输出一行信息i:ji:\ ji: j,其中iii表示分区编号,jjj表示分区内玩具数量。
每组数据之间,用空行隔开。
数据范围:
每个测试点最多包含101010组数据。
1≤n,m≤50001≤n,m≤50001≤n,m≤5000
所有坐标取值范围[−105,105][−10^5,10^5][−105,105]。
对于某个玩具(Xi,Yi)(X_i, Y_i)(Xi,Yi),和某个隔板(Ui,y1)−(Li,y2)(U_i,y_1)-(L_i,y_2)(Ui,y1)−(Li,y2),它在隔板左边当且仅当((Ui,y1)−(Li,y2))×((Xi,Yi)−(Li,y2))=(Ui−Li,y1−y2)×(Xi−Li,Yi−y2)((U_i,y_1)-(L_i,y_2))\times ((X_i, Y_i)-(L_i,y_2))=\\(U_i-L_i,y_1-y_2)\times (X_i-L_i, Y_i-y_2)((Ui,y1)−(Li,y2))×((Xi,Yi)−(Li,y2))=(Ui−Li,y1−y2)×(Xi−Li,Yi−y2)成右手系。由于隔板是从左到右给出的,所以某个玩具一定对于这些隔板依次是右右……左左……,从而可以二分出位置。代码如下:
#include <iostream>
#include <cstring>
#define x first
#define y second
using namespace std;
using PLL = pair<long, long>;const int N = 5010;
int n, m;
PLL a[N], b[N];
int res[N];PLL operator-(PLL a, PLL b) {return {a.x - b.x, a.y - b.y};
}long cross(PLL a, PLL b) {return a.x * b.y - a.y * b.x;
}int find(long x, long y) {int l = 0, r = n;while (l < r) {int mid = l + r >> 1;if (cross(a[mid] - b[mid], PLL{x, y} - b[mid]) > 0) r = mid;else l = mid + 1;}return l;
}int main() {bool is_first = true;while (scanf("%d", &n), n) {long x1, y1, x2, y2;scanf("%d%ld%ld%ld%ld", &m, &x1, &y1, &x2, &y2);for (int i = 0; i < n; i++) {long u, l;scanf("%ld%ld", &u, &l);a[i] = {u, y1}, b[i] = {l, y2};}a[n] = {x2, y1}, b[n] = {x2, y2};if (is_first) is_first = false;else puts("");memset(res, 0, sizeof res);while (m--) {long x, y;scanf("%ld%ld", &x, &y);res[find(x, y)]++;}for (int i = 0; i <= n; i++)printf("%d: %d\n", i, res[i]);}
}
对于每组数据,时间复杂度O(n+mlogn)O(n+m\log n)O(n+mlogn),空间O(n)O(n)O(n)。
【ACWing】2983. 玩具相关推荐
- AcWing 2983. 玩具
AcWing 2983. 玩具 题目描述 代码 #include<bits/stdc++.h> #define FOR(i,a,b) for(int i=(a);i<=(b);++i ...
- AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)
计算几何基础题 题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球. 我们首先考虑暴力. 我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x ...
- Acwing:GF和猫咪的玩具(Floyd Python)
题目链接
- 2022-2028年中国木制拼板玩具市场调查研究报告
[报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国木制拼板玩具行业市场行业相关概述.中国 ...
- python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到 ...
- [bzoj1054][HAOI2008]移动玩具
题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具 ...
- python如何编写数据库_如何在几分钟内用Python编写一个简单的玩具数据库
python如何编写数据库 MySQL, PostgreSQL, Oracle, Redis, and many more, you just name it - databases are a re ...
- vPower系列1: vMotion-没有vMotion,虚拟化只是玩具
vPower今天开讲,第一篇vMotion.vMotion是虚拟化可以支撑核心应用的重要前提,没有vMotion,虚拟化只是玩具,只能应用在实验环境和开发环境.为什么这么说呢?为什么会有vMotion ...
- AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)
AcWing 734. 能量石 #include<cstdio> #include<algorithm> #include<cstring> #include< ...
最新文章
- python输入若干个整数试找出其中的最大数和最小数_Python编程的若干个经典小技巧...
- 为什么工作10年你的工资还不如新来的实习生
- 使用Connector / Python连接MySQL/查询数据
- hdu - 2667 Proving Equivalences(强连通)
- 端口映射--PortTunnel
- 在mysql 使用binlog日志
- 新手学堂之有刷/无刷动力电调与马达知识
- 软件性能测试操作系统,优秀的系统性能测试软件Sisoft Sandra
- 专访全面智能CTO陈章:想法只有在技术落地的那一刻才有撬动地球的能力
- weka 贝叶斯 java_weka中朴素贝叶斯的实现
- linux u盘 修复工具,如何在Linux终端中修复U盘驱动器问题
- ios MultipeerConnectivity蓝牙通讯
- 奇偶数求和:输入任意个正整数(以输入负数表示结束输入),分别求出所有的奇数之和,所有的偶数之和。 示例: 输入格式:1 2 3 4 -1 输出格式:sumodd=4 sumeven=
- python实现转置矩阵_用Python转置矩阵?
- 亚马逊SP-API自发货标记发货对接
- Unity内置Shader解读3——Decal
- linux下ss工具简介
- ​独家 | 一文读懂贝叶斯优化
- 那些C++程序让你笑三天的奇葩名字
- 公司职位简称表 C?O