题目描述
身为课代表的她,下课总愿意帮老师发作业。老师的作业好多好多啊,一天
下来,她下课休息时间也无几了……
要是天花板上有一只激光炮该多好啊!把作业塞到激光炮里面,轰——一排
同学该都拿到作业了吧?如果激光炮装在了一排同学的中间,转来转去很不方便,
改装成同时往相对的两个方向发射不是更好吗?(嗯,抵消反冲力)这样发作业
该有多快啊,她能多省心啊!
可是因为激光炮太重了,转不动也移不动——嗯,没错,该在天花板上装上
轨道!嗯——这样,激光炮就可以平移了,可是……呃——还是不能转起来!
那只好把它移到最佳的位置了……可是,最佳的位置在哪里呢?
输入描述
一行一个整数 N(1≤N≤10)。
之后 N 行,每行两个数 X,Y(-10^9≤X,Y≤10^9,且 X≠0,Y≠0)描
述方向。如果把教室抽象成平面直角坐标系,那么当激光炮在坐标轴原点时,能
够射到点(X,Y)。
又一行一个整数 M(1≤M≤100000),教室里共有 M 个同学的书包。
之后 M 行,每行两个数 X,Y(-10^9≤X,Y≤10^9),依次描述每个同学
书包的位置。
再一行一个整数 Q(1≤Q≤100000),共有 Q 个询问。
之后 Q 行,每行两个数 X,Y(-10^9≤X,Y≤10^9),描述一组询问。
输出描述
对于每组询问给出的 X,Y,输出当激光炮移到(X,Y)时,能够把作业射
进多少个同学的书包。当然,如果在(X,Y)上有某个同学放着书包,激光炮
同样能把作业射进去。
输入样例
3
1 1
1 2
1 3
3
1 1
1 2
1 3
3 0 0
-1 0
-2 0
输出样例
3
1
1
数据范围
测试点编号 N= M≤ Q≤ X,Y∈
1 5 5 5
2 8 100 100 [-20,20]
3 8 200 200
4 8 500 500 [-50,50]
5 10 1000 1000 [-100,100] 6 10 5000 5000
7 10 100000 100000 [-1000,1000]
8 10 10000 10000 [-10000,10000] 9 10 100000 100000 10 10 [-10^9,10^9]
 
sol:令激光射到的点是xi,yi,书包是x,y询问时x0,y0,那么如果能射到,一定满足(x-x0)/(y-y0)=xi/yi,划一下式子就是xyi-xiy=x0yi-xiy0,显然前面的是可以预处理的,最多只有n*m条,用map存下来即可,注意判一下x0=x,y0=y即可
 
詹神题解

对平面进行哈希。考虑八皇后处理对角线的做法:用x+y和x-y来进行判重。
类似地,推广一下,我们可以用 k1x+k2y 的方法来进行判重。从各个点引出直
线,将原点代入方程检验即可。时间复杂度 O(N(M+Q))。
注意判断重点和重方向!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll Base=;
const int N=;
int n,nn,m,Q;
struct Node
{
ll x,y;
inline bool operator==(const Node &tmp)const
{
return x*tmp.y==y*tmp.x;
}
}a[];
inline bool cmp(Node p,Node q)
{
if(p.y*q.y<) return (p.x*q.y<p.y*q.x);
else return (p.x*q.y>p.y*q.x);
}
map<ll,int>Zer,Map[N];
int main()
{
freopen("laser.in","r",stdin);
freopen("laser.out","w",stdout);
int i,j,x,y;
R(n);
for(i=;i<=n;i++)
{
R(a[i].x); R(a[i].y);
}
sort(a+,a+n+,cmp);
nn=unique(a+,a+n+)-a-;
R(m);
for(i=;i<=m;i++)
{
R(x); R(y);
Zer[x*Base+y]++;
for(j=;j<=nn;j++)
{
Map[j][x*a[j].y-y*a[j].x]++;
}
}
R(Q);
while(Q--)
{
R(x); R(y);
int ans=;
ans-=Zer[x*Base+y]*(nn-);
for(i=;i<=nn;i++) ans+=Map[i][x*a[i].y-y*a[i].x];
Wl(ans);
}
return ;
}

7.26T2某不科学的迷你激光炮的更多相关文章

  1. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

  2. [数据科学] 从text, json文件中提取数据

    文本文件是基本的文件类型,不管是csv, xls, json, 还是xml等等都可以按照文本文件的形式读取. #-*- coding: utf-8 -*- fpath = "data/tex ...

  3. [LeetCode] Mini Parser 迷你解析器

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  4. csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法

    保存在csv中的 013812345678,前面的0会被去掉,后面是科学计数法显示.保存成 col1,="013812345678" 即可. 注意,分隔符逗号后面直接接“=”等号. ...

  5. python和数据科学(Anaconda)

    Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...

  6. iOS警告收录及科学快速的消除方法

    来自: http://www.cnblogs.com/dsxniubility/p/4757760.html iOS警告收录及科学快速的消除方法     前言:现在你维护的项目有多少警告?看着几百条警 ...

  7. Anaconda 用于科学计算的 Python 发行版

    用于科学计算的 Python 发行版: 1.Anaconda  https://www.continuum.io/    公司continuum.  有商业版本. Anaconda is the le ...

  8. 科学计算软件——Octave安装

    Octave是一个旨在提供与Matlab语法兼容的开放源代码科学计算及数值分析的工具,是Matlab商业软件的一个强有力的竞争产品. 参考:[ML:Octave Installation] Gener ...

  9. 循序渐进做项目系列(4)迷你QQ篇(2)——视频聊天!(附源码)

    一·效果展示 源码派送:MiniQQ1.1 文字聊天的实现参见:循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天 二·服务端设计 对于实现视频聊天而言,服务端最核心的工作就是要构造多媒 ...

随机推荐

  1. SpringCloud Hystrix 参数

    hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKey Command PropertiesExecution ...

  2. 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)

    原文:在论坛中出现的比较难的sql问题:2(row_number函数+子查询) 2.如何去掉字段内的重复.

  3. sql 视图的用法

    在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联 ...

  4. webpack如何使用vue

    1.安装vue的包:  cnpm i vue -S 2.在main.js中导入包 3.运行起来报错 3.1第一种解决办法: 3.2第二种解决办法: 让我们先回顾一下包的查找规则: //1.找项目根目录 ...

  5. Eclipse中如何创建一个完整的Maven-Web项目

    Maven Web项目搭建 1.首先确保本地开发环境搭建完毕(jdk,maven). 2.打开Eclipse,新建Maven项目.选择Maven Project选项. 3.将第一项:Create a ...

  6. SPI、I2C、I2S

    1. SPI总线 1.1 基础概念: 技术性能 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构:支持多slave模式应用,一般仅支持单 ...

  7. 利用setuptools发布Python程序到PyPI,为Python添砖加瓦

    pip install的东西从哪里来的? 从PyPI (Python Package Index)来的,官网是:  https://pypi.python.org/pypi/执行pip install ...

  8. Zabbix监控平台搭建部署与概述

    zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix 能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位 ...

  9. YOLO---Darknet下的 GPU vs CPU 速度

    YOLO---Darknet下的 GPU vs CPU 速度 目录 一.基础环境 二.安装Darknet-yolo v3 三.CPU下测试 四.GPU下测试 五.测试速度对比结论 正文 一.基础环境 ...

  10. 获取当前日期或者某个日期相隔N天内的全部日期以及星期几

    业务需要需要获取当前日期相隔30天内的全部日期以及星期几,没插件因此特地写了一个: /* 说明:获取当前日期或者某个日期相隔N天内的全部日期以及星期几 使用: let test = new getdi ...