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

    上例的HelloWorld是由Android sutudio 自动生成的,现在我们手动来配置. 1. 重新创建工程 2. 创建空的Activity 生成的MainActivity.java 文件: p ...

  2. (十一)web服务与javaweb结合(2)

    一.解决问题及解决方法 解决问题:上章节用监听器的方式是有缺陷的:web服务的端口和web工程的端口不能一致. 解决方案:将webService绑定到web工程中,使得共用一个端口. 二.案例 2.1 ...

  3. 在CentOS部署AspNetCore网站

    前段时间某云服务器大促,就买了一台打算折腾一下,买了几个月,却啥也没做,就改了个初始密码.最近快到双十一了,另一家厂商相同配置的服务器价格又便宜了一大截,看来又得剁手了.从今年开始,搜索一下云服务器, ...

  4. Asp.Net Core 轻松学系列-2从安装环境开始

    Asp.Net Core 介绍     Asp.Net Core是微软新一代的跨平台开发框架,基于 C# 语言进行开发,该框架的推出,意味着微软从系统层面正式进击 Linux 服务器平台:从更新速度开 ...

  5. Go part 2 基础语法

    关键字.标识符 标识符: 是用户或系统定义的有意义单词组合,或单词与数字组合(具体意义有定义者决定) 标识符以字母下划线开头,大小写敏感,比如:boy,  Boy,  _boy,  _(匿名变量,用来 ...

  6. Java中的ThreadLocal详解

    一.ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线 ...

  7. HttpResponse与JasonResponse

    两者的含义 我们都知道后台给前台返回的数据都是字符串类型,那么怎么返回成为一个问题 HttpResponse与JasonResponse都是django中后台给前台返回数据的方法, 并且他们最后走的都 ...

  8. APP漏洞之WebView File域同源策略绕过漏洞

    i春秋作家:MAX丶 基本知识Android架构 Kernel内核层 漏洞危害极大,通用性强 驱动由于多而杂,也可能存在不少漏洞 Libaries系统运行库层 系统中间件形式提供的运行库 包括libc ...

  9. laravel中引入composer安装在vendor中的第三方组件

    一.安装第三方组件 方法一:使用命令行安装第三方(已phpword为例): composer require phpoffce/phpword ^v0..* 方法二: 修改主项目composer.js ...

  10. 你不知道的javascript(上卷)读后感(一)

    三剑客 编译,顾名思义,就是源代码执行前会经历的过程,分三个步骤, 分词/词法分析,将我们写的代码字符串分解成多个词法单元 解析/语法分析,将词法单元集合生成抽象语法树(AST) 代码生成,抽象语法树 ...