题目描述
身为课代表的她,下课总愿意帮老师发作业。老师的作业好多好多啊,一天
下来,她下课休息时间也无几了……
要是天花板上有一只激光炮该多好啊!把作业塞到激光炮里面,轰——一排
同学该都拿到作业了吧?如果激光炮装在了一排同学的中间,转来转去很不方便,
改装成同时往相对的两个方向发射不是更好吗?(嗯,抵消反冲力)这样发作业
该有多快啊,她能多省心啊!
可是因为激光炮太重了,转不动也移不动——嗯,没错,该在天花板上装上
轨道!嗯——这样,激光炮就可以平移了,可是……呃——还是不能转起来!
那只好把它移到最佳的位置了……可是,最佳的位置在哪里呢?
输入描述
一行一个整数 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. sql 计算奇数还是偶数

    & 运算符来判断奇数还是偶数 sql判断奇数还是偶数 3&1 返回 1 2&1  返回0 0&1 返回 0

  2. asp.net类似于js中的setTimeOut()的函数作用?

    asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...

  3. Linux命令(1)grep

    开发过程中,与测试运维中 逐渐学习 运维常用的Linux 命令: 转自https://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Lin ...

  4. java01_简介_开发环境

    JAVA的前世今生 美国SUN(Stanford University Network)公司,在中国大陆的正式中文名为"太阳计算机系统(中国)有限公司",在中国台湾的正式中文名为& ...

  5. Docker启动Elasticsearch报错java.nio.file.AccessDeniedException

    报错信息 Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 问题分析 表面上是说容 ...

  6. JVM学习笔记——字节码指令

    JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...

  7. xposed获取context 的方法

    // 应用被加壳,采用这种方式加载类 try { XposedHelpers.findAndHookMethod(Application.class, "attach", Cont ...

  8. vue嵌套数据多层级里面的数据不自动更新渲染dom

    可以尝试手动调用更新 主要代码: vm.$forceUpdate() 官网

  9. windows使用msi包安装mysql8.0.12

    1.前言 利用windows提供的二进制分发包(msi)安装是非常简单的,只要根据提示安装就可以了,和安装普通软件没有什么区别.但是如果想在安装的时候就把规划的配置好,是需要看懂每个步骤到底做什么用, ...

  10. kafka学习遗留问题

    1.ZK在kafka中的作用 2.Kafka支持优先级队列么 未完待续