POJ2318 TOYS
嘟嘟嘟
题面:先告诉你一个矩形抽屉的坐标,然后\(n\)个隔板将抽屉分成了\(n + 1\)格(格子从\(0\)到\(n - 1\)标号),接下来随机输入\(m\)个玩具的坐标。问最后每一个格子里有多少个玩具。
仔细想想就是一道计算几何入门题。
对于一个玩具\((x_0, y_0)\),我们只要找到在他的左面且离他最近的隔板\(i\),则这个玩具就在第\(i\)格里。
怎么判断隔板\(AB\)(规定\(A\)点是隔板的上端,\(B\)点是隔板下端)是否在玩具的左边?用叉积即可:只要\(\overrightarrow{OA} \times \overrightarrow{OB} > 0\),就说明在左边。
然后因为有人说从左到右枚举会超时,所以我就把枚举改成倍增了。
然鹅枚举\(O(n ^2)\)能过呀,于是我就枚举交了一发,也过了……(???)
代码里注释掉的是枚举的
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 5e3 + 5;
inline ll read()
{
ll ans = 0;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = (ans << 1) + (ans << 3) + ch - '0'; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < 0) x = -x, putchar('-');
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
}
int n, m, xl, yl, xr, yr;
int ans[maxn];
struct Vec
{
int x, y;
int operator * (const Vec& oth)const
{
return x * oth.y - oth.x * y;
}
};
struct Point
{
int x, y;
Vec operator - (const Point& oth)const
{
return (Vec){x - oth.x, y - oth.y};
}
}ad[maxn], au[maxn], P;
const int N = 13;
void solve()
{
int L = 0;
for(int i = N, t; i >= 0; --i) if((t = L + (1 << i)) <= n)
{
if((au[t] - P) * (ad[t] - P) > 0) L = t;
}
/*int L = 0;
while(L < n)
{
if((au[L + 1] - P) * (ad[L + 1] - P) < 0) break;
L++;
}*/
ans[L]++;
}
int main()
{
while(scanf("%d", &n) && n)
{
Mem(ans, 0);
m = read();
xl = read(); yl = read(); xr = read(); yr = read();
au[0].y = yl;
for(int i = 1; i <= n; ++i)
{
au[i].x = read(); au[i].y = yl;
ad[i].x = read(); ad[i].y = yr;
}
for(int i = 1; i <= m; ++i)
{
P.x = read(); P.y = read();
solve();
}
for(int i = 0; i <= n; ++i) write(i), putchar(':'), space, write(ans[i]), enter;
enter;
}
return 0;
}
POJ2318 TOYS的更多相关文章
- POJ2318 TOYS[叉积 二分]
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14433 Accepted: 6998 Description ...
- POJ2318 TOYS(叉积判断点与直线的关系+二分)
Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad have a prob ...
- POJ-2318 TOYS,暴力+叉积判断!
TOYS 2页的提交记录终于搞明白了. 题意:一个盒子由n块挡板分成n+1块区 ...
- POJ-2318 TOYS 计算几何 判断点在线段的位置
题目链接:https://cn.vjudge.net/problem/POJ-2318 题意 在一个矩形内,给出n-1条线段,把矩形分成n快四边形 问某些点在那个四边形内 思路 二分+判断点与位置关系 ...
- [poj2318]TOYS(直线与点的位置关系)
解题关键:计算几何入门题,通过叉积判断. 两个向量的关系: P*Q>0,Q在P的逆时针方向: P*Q<0,Q在P的顺时针方向: P*Q==0,Q与P共线. 实际就是用右手定则判断的. #i ...
- POJ2318:TOYS(叉积判断点和线段的关系+二分)&&POJ2398Toy Storage
题目:http://poj.org/problem?id=2318 题意: 给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数.(其中这些线段 ...
- 【kuangbin专题】计算几何基础
1.poj2318 TOYS 传送:http://poj.org/problem?id=2318 题意:有m个点落在n+1个区域内.问落在每个区域的个数. 分析:二分查找落在哪个区域内.叉积判断点与线 ...
- poj分类解题报告索引
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
- POJ2318:TOYS——题解
http://poj.org/problem?id=2318 题目大意:给一个大矩形,分成n+1份,求落在每一份的点的数量. —————————————————— 首先叉积可以判断一个点在边界的左边还 ...
随机推荐
- IntelliJ使用指南—— 导入Eclipse的Web项目
通常一个团队中可能有人用eclipse,有人用intelliJ,那么经常会出现需要导入别人用eclipse建好的web项目.而IntelliJ提供了多种项目类型的导入方式,其中就有eclipse. 在 ...
- VS2013漂亮字体
使用字体:Fixedsys Excelsior 3.011.首先下载字体:http://www.fixedsysexcelsior.com/ 2.安装字体:控制面板 -> 字体,复制下载的文件进 ...
- 九、curator recipes之不可重入锁InterProcessSemaphoreMutex
简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况 ...
- 十四、ReentrantLock重入锁
一.简介 JDK提供了Lock接口来实现更丰富的锁控制,ReentrantLock即Lock接口的实现 JDK文档:http://tool.oschina.net/uploads/apidocs/jd ...
- 十三、栅栏CyclicBarrier
一.简介 栅栏CyclicBarrier的作用就是等待一组线程都准备好了,然后执行某个任务.这与CountDownLatch很相似. 但是CyclicBarrier和CountDownLatch是有区 ...
- 设计模式入门,策略模式,c++代码实现
// test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...
- ASP.NET MVC与ASP.NET WebForm
ASP.NET MVC是微软公司的一款WEB开发框架,整合了“模型-视图-控制器”架构的高效与整洁,是敏捷开发最现代的思想与技术.它是传统ASP.NET WebForm的一个完善的替代品. 1.当今的 ...
- Window ssh免密登录到远程Linux服务器
SSH采用的是”非对称密钥系统”,即耳熟能详的公钥私钥加密系统. 1. 基于口令的安全验证 这种方式使用用户名密码进行联机登录,一般情况下我们使用的都是这种方式.整个过程大致如下: (1)客户端发起连 ...
- BZOJ1492 [NOI2007]货币兑换
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- html-路径的介绍
一.绝对路径 绝对路径是指文件在硬盘上真正存在的路径 - D:\Java\JavaWeb\day01\a.jpg - http://www.baidu.com/b.jpg 二.相对路径 一个文件相对于 ...