hdu6731 Angle Beats(ccpc秦皇岛A,计算几何)
时间:2019-10-16
本文章向大家介绍hdu6731 Angle Beats(ccpc秦皇岛A,计算几何),主要包括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; }
原文地址:https://www.cnblogs.com/carcar/p/11688108.html
- linux运维中的命令梳理(三)
- 轻松水印-批量提取exif信息加水印的工具
- Enterprise Library 4.1学习笔记7----缓存应用程序块之SqlDependency
- linux运维中的命令梳理(一)
- 可视化你的BLAST结果
- linux运维中的命令梳理(二)
- VB-取日期属于星期几
- 全球AI新闻创新实践系列③:华邮、雅虎、美联社、Quartz怎么干!
- nginx+php负载均衡集群环境中的session共享方案梳理
- PowerPoint发布及链接图片的处理
- EXCEL单元格的引用方式
- SqlDependency学习笔记
- linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
- 运维利器-ClusterShell集群管理操作记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法