hdu6731 Angle Beats(ccpc秦皇岛A,计算几何)
题目链接:
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,计算几何)的更多相关文章
- Angle Beats Gym - 102361A(计算几何)
Angle Beats \[ Time Limit: 4000 ms \quad Memory Limit: 1048576 kB \] 题意 给出 \(n\) 个初始点以及 \(q\) 次询问,每次 ...
- Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解
题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...
- CCPC 2019 秦皇岛 Angle Beats
题目 给出P个点,然后给出Q个询问,问从P中选出两个点和给的点能组成直角三角形的方法个数.-O2,时间限制5秒. \[2\leqslant P\leqslant 2000,\qquad 1\leqsl ...
- Gym102361A Angle Beats(直角三角形 计算几何)题解
题意: \(n\)个点,\(q\)个询问,每次问包含询问点的直角三角形有几个 思路: 代码: #include<bits/stdc++.h> using namespace std; co ...
- 2017 CCPC秦皇岛 M题 Safest Buildings
PUBG is a multiplayer online battle royale video game. In the game, up to one hundred players parach ...
- 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 ...
- 2017 CCPC秦皇岛 A题 A Ballon Robot
The 2017 China Collegiate Programming Contest Qinhuangdao Site is coming! There will be teams parti ...
- 2018年9月28日CCPC秦皇岛站参赛总结
day1: 被中间结果超出int范围给叉了,立刻意识到了自己的弱小以及校赛出题的时候是怎么叉别人的 day2: 签到签了40分钟,谨慎一些还是很好的,机子重启耽误了一些时间 一道暴力+LCS的简单题被 ...
- ccpc秦皇岛部分题解
A. 题意:就是有一个大桌子,环绕有顺势站1~m共m个座位,n个选手坐在部分位置上.然后如果有一个人a了一道题,却没有立刻发气球给他,他产生怒气值是发气球给他的时间减去a题时间.现在有一个机器人顺时针 ...
随机推荐
- 在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来)
原文:在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来) 在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘 ...
- AVOSCloud入门教程:Android Parse云服务的Hello World
本文时间戳:2013年8月30日 AVOSCloud(万象云)才刚刚推出来不久的咯,其背后创业的推动者据说是Youtube的华人老大陈士骏(SteveChen,貌似手头有很多创业,美味,玩拍,都是,开 ...
- Centos7阿里云安装OpenProject-亲测
10/182019年10月18日13:50 参考 <https://ywnz.com/linuxyffq/4085.html> 说在前头:网上有各种教程,包括官方自己的教程,在阿里云服务器 ...
- C# EF 加密连接数据库连接字符串
不多说,直接上代码 public partial class Model1 : DbContext { private static string connStr = ""; pu ...
- linux Ubuntu14.04 make编译文件报错:No rule to make target `/usr/lib/libpython2.7.so', needed by `python/_pywraps2.so'. Stop.
错误过程:当“make”编译文件时报错No rule to make target `/usr/lib/libpython2.7.so', needed by `python/_pywraps2.so ...
- 命令“regsvr32 /s /n /i:user "XXXXXX"”已退出,代码为 3
问题:命令“regsvr32 /s /n /i:user "F:\XXXXXXXXXXXXXXXXX\Release\One.ocx"”已退出,代码为 3 解决方法: The is ...
- C语言中参数的传递
普通情况: 调用函数参数的传递,是采取入栈的方式,先上图一张: Fun是被调用的函数,而为了演示其参数传递的过程,特意多设了几个参数,其传递参数的汇编代码如下: 可以看出,汇编代码中将这9个参数的前5 ...
- 探究Java如何实现原子操作(atomic operation)
1. 让我们首先了解下java 中 Volatile 关键字 Volatile可实现java内存模型当中的可见性, java内存模型的可见性: 可见性,是指线程之间的可见性,一个线程修改的状态对另一个 ...
- 虚拟机更改MAC
有两种方式修改MAC地址 方法一 现实中网卡一出厂就有MAC地址,虚拟机的MAC地址见下图,这个就相当于出厂MAC.在这里修改MAC相当于直接修改硬件MAC 方法二 这里修改MAC,硬件MAC并没有变 ...
- 从excel 导入数据绘制 散点图
import xlrdimport matplotlib.pyplot as plt bok = xlrd.open_workbook(r'test.xls') sht = bok.sheets()[ ...