题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=6731

题意:

给出$n$个点,有$q$次询问

每次询问给出一个点$b$,求这$n+1$个点,组成直角三角形并且包含$b$的组合有多少种

数据范围:

$1\leq n \leq 2000$

$1\leq q \leq 2000$

分析:

分类讨论

  • 当询问点作为直角。让$n$个点和$b$建立向量,其中向量化为最简,求互相垂直的向量对,可以枚举向量,求垂直向量
  • 当给出的初始点作为直角,以每个初始点为偏移,建立向量,再枚举$b$点,求互相垂直的向量对

最简向量,首先除去gcd,如果x为负数,向量取反,如果x为0,y为负数,向量取反,这样唯一确定向量的方向了

注意:int就够了,longlong会超时

还有一个更快的方法:直接存x,y不化简,在向量比较时,直接比较斜率,如果即大于又小于那么这两个向量相等

AC代码:

#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
const int maxn=2007;
pii a[maxn],b[maxn];
int n,q,ans[maxn];
int mygcd(int a,int b){
if(b==0)return a;
return mygcd(b,a%b);
}
pii getp(int x,int y){
int tem=mygcd(x,y);
x/=tem,y/=tem;
if(x<0)x=-x,y=-y;
else if(x==0&&y<0)y=-y;
return make_pair(x,y);
}
map<pii,int>ma;
int main(){
while(scanf("%d %d",&n,&q)==2){
for(int i=1;i<=n;i++)scanf("%d %d",&a[i].first,&a[i].second);
for(int i=1;i<=q;i++)scanf("%d %d",&b[i].first,&b[i].second);
for(int i=1;i<=q;i++){
ma.clear();
for(int j=1;j<=n;j++){
int x=a[j].first-b[i].first,y=a[j].second-b[i].second;
ma[getp(x,y)]++;
if(ma.count(getp(-y,x)))ans[i]+=ma[getp(-y,x)];
}
}
// for(int i=1;i<=q;i++)printf("%d\n",ans[i]),ans[i]=0;
//cout<<"cdsafa"<<endl;
for(int i=1;i<=n;i++){
ma.clear();
for(int j=1;j<=n;j++){
if(j==i)continue;
int x=a[j].first-a[i].first,y=a[j].second-a[i].second;
ma[getp(x,y)]++;
}
for(int j=1;j<=q;j++){
int x=b[j].first-a[i].first,y=b[j].second-a[i].second;
if(ma.count(getp(-y,x)))ans[j]+=ma[getp(-y,x)];
}
}
for(int i=1;i<=q;i++)printf("%d\n",ans[i]),ans[i]=0;
}
return 0;
}

  

hdu6731 Angle Beats(ccpc秦皇岛A,计算几何)的更多相关文章

  1. Angle Beats Gym - 102361A(计算几何)

    Angle Beats \[ Time Limit: 4000 ms \quad Memory Limit: 1048576 kB \] 题意 给出 \(n\) 个初始点以及 \(q\) 次询问,每次 ...

  2. Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解

    题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...

  3. CCPC 2019 秦皇岛 Angle Beats

    题目 给出P个点,然后给出Q个询问,问从P中选出两个点和给的点能组成直角三角形的方法个数.-O2,时间限制5秒. \[2\leqslant P\leqslant 2000,\qquad 1\leqsl ...

  4. Gym102361A Angle Beats(直角三角形 计算几何)题解

    题意: \(n\)个点,\(q\)个询问,每次问包含询问点的直角三角形有几个 思路: 代码: #include<bits/stdc++.h> using namespace std; co ...

  5. 2017 CCPC秦皇岛 M题 Safest Buildings

    PUBG is a multiplayer online battle royale video game. In the game, up to one hundred players parach ...

  6. 2017 CCPC秦皇岛 E题 String of CCPC

    BaoBao has just found a string  of length  consisting of 'C' and 'P' in his pocket. As a big fan of ...

  7. 2017 CCPC秦皇岛 A题 A Ballon Robot

    The 2017 China Collegiate Programming Contest Qinhuangdao Site is coming! There will be  teams parti ...

  8. 2018年9月28日CCPC秦皇岛站参赛总结

    day1: 被中间结果超出int范围给叉了,立刻意识到了自己的弱小以及校赛出题的时候是怎么叉别人的 day2: 签到签了40分钟,谨慎一些还是很好的,机子重启耽误了一些时间 一道暴力+LCS的简单题被 ...

  9. ccpc秦皇岛部分题解

    A. 题意:就是有一个大桌子,环绕有顺势站1~m共m个座位,n个选手坐在部分位置上.然后如果有一个人a了一道题,却没有立刻发气球给他,他产生怒气值是发气球给他的时间减去a题时间.现在有一个机器人顺时针 ...

随机推荐

  1. C++开源库大全

        标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Template Library:标准模板库 ...

  2. 怎样修改element-ui中的样式?

    方法一 方法二 使用  /deep/ .homePage /deep/ .el-main { padding: 0;  } .homePage为我们要修改组件类名的父级组件样式类名..即使定义一个空的 ...

  3. JVM性能优化--类加载器,手动实现类的热加载

    一.类加载的机制的层次结构 每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑,这些".java"文件经过Java编译器编译成拓展名为". ...

  4. 前端之:传统的DOM是如何渲染的?

    a.纯后端渲染:页面发送请求,后端服务器中将数据拼成完整DOM树,并转换成一个字节流作为HTTP Response的body返回给浏览器.优点在于 返回的HTTP Response是包含着全部页面内容 ...

  5. angular中控制器之间传递参数的方式

    在angular中,每个controller(控制器)都会有自己的$scope,通过为这个对象添加属性赋值,就可以将数据传递给模板进行渲染,每个$scope只会在自己控制器内起作用,而有时候需要用到其 ...

  6. 运维开发笔记整理-使用Django编写helloworld

    运维开发笔记整理-使用Django编写helloworld 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.创建Django项目 1>.创建Django项目 djang ...

  7. 使用Arduino开发板控制步进电机

    目前为止,我还没有真正深入了解过电机,特别是步进电机. 最近我在计划一个项目,需要相对精确的电机控制,所以可能会使用到步进电机,但很快就意识到我首先应该更多地了解这些. 本篇文章主要介绍我到目前为止学 ...

  8. WARNING: 'automake-1.14' is missing on your system.

    检查发现其实已经安装了automake,只不过版本是automake-1.15.1 $ automake --version automake (GNU automake) 1.15.1 解决方法一  ...

  9. 设置input 中placeholder的样式

    ::-webkit-input-placeholder { /* Chrome/Opera/Safari */ position: relative; top: 4px; } ::-moz-place ...

  10. 安装pytest

    1.安装pytest 2.执行一个用例 进入测试用例目录下,运行以test开头的一个用例. 执行成功. 备注:1.其实测试函数或方法只要以test开头就可以被运行的2.测试文件的名字,其实可以是任意的 ...