题目链接:

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. springMVC关于异常优先级的处理

    优先级 既然在SpringMVC中有两种处理异常的方式,那么就存在一个优先级的问题: 当发生异常的时候,SpringMVC会如下处理: (1)SpringMVC会先从配置文件找异常解析器Handler ...

  2. flutter常见编译运行等奇怪问题的汇总汇(l转)

    1. flutter ios 卡死在闪屏页:解决办法: 1) flutter doctor 2) flutter clean 3) flutter build ios --release 4) Arc ...

  3. springboot学习入门简易版三---springboot2.0启动方式

    2.4使用@componentscan方式启动 2.4.1 @EnableAutoConfiguration 默认只扫描当前类 @EnableAutoConfiguration 默认只扫描当前类,如果 ...

  4. 采集代理ip 地址【西刺,快代理】

    # 嗯,...因为经常需要使用代理去抓一点东西,就有了下面一段代码,第一版不是很好,后面用到了再来优化 import re,pymysql,time,redis from urllib.request ...

  5. c# List<Object>和List<实体>相互转化

    开发的过程中总会遇到各种转化的问题,现在我做的开发接口中就遇到需要将List<Object> 中的Object又含有List<实体>归为一个list中,就是要list中没有Li ...

  6. 二叉树遍历(非递归版)——python

    二叉树的遍历分为广度优先遍历和深度优先遍历 广度优先遍历(breadth first traversal):又称层次遍历,从树的根节点(root)开始,从上到下从从左到右遍历整个树的节点. 深度优先遍 ...

  7. FastDateFormat日期工具类

    原文:https://blog.csdn.net/u013823538/article/details/80197476 public class DateUtil { public static f ...

  8. Go语言中的IO操作、Flag包以及urfave/cli命令行框架

    一.格式化输入和输出 1.从终端获取用户的输入 fmt.Scanf  空格作为分隔符,占位符和格式化输出的一致 fmt.Scan  从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为 ...

  9. ECU 自动化生产测试系统

    概述 ECU(Electronic Control Unit) 是现代车辆中最重要的部件之一,其稳定性.可靠性对车辆安全性的影响至关重要.如何保证ECU 生产质量和效率.如何在生产过程中对ECU 进行 ...

  10. linux网络编程之posix消息队列

    在前面已经学习了System v相关的IPC,今天起学习posix相关的IPC,关于这两者的内容区别,简单回顾一下: 而今天先学习posix的消息队列,下面开始: 接下来则编写程序来创建一个posix ...