Angle Beats(计算几何)
Angle Beats(计算几何)
思路:mapmapmap排序+暴力枚举。
分两种情况:1.Q[i]1.Q[i]1.Q[i]作为直角顶点.2.Q[i]2.Q[i]2.Q[i]不作为直角顶点。
此题最重要的是利用mapmapmap将向量去重,如(2,1)=(4,2)(2,1)=(4,2)(2,1)=(4,2)
时间复杂度:O(nq+log(n+q))O(nq+log(n+q))O(nq+log(n+q))
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
struct point{ll x,y;il point fun()const{ //保证x>=0 在第1,4象限,便于排序 if(x<0||(!x&&y<0)) return {-x,-y};return *this;}bool operator <(const point&p) const{ //用map实现分类.(2,1)=(4,2)是同一个向量. point a=fun(),b=p.fun(); //tan从大到小排序. return a.x*b.y<b.x*a.y;}point operator-(const point&p)const{ //两点构成的向量 return {x-p.x,y-p.y};}
}a[N],Q[N],tmp;
map<point,int>mp;
int n,q,ans[N];
int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);for(int i=1;i<=q;i++) scanf("%lld%lld",&Q[i].x,&Q[i].y);for(int i=1;i<=q;i++){ //Q[i]作为直角顶点. mp.clear();for(int j=1;j<=n;j++)mp[a[j]-Q[i]]++;for(int j=1;j<=n;j++){tmp=a[j]-Q[i];tmp={-tmp.y,tmp.x};ans[i]+=mp[tmp];}ans[i]>>=1;//直角的两条边都被算了,所以要除以2. }for(int i=1;i<=n;i++){ //a[i]作为直角顶点. mp.clear();for(int j=1;j<=n;j++)if(i!=j) mp[a[j]-a[i]]++;for(int j=1;j<=q;j++){tmp=Q[j]-a[i];tmp={-tmp.y,tmp.x};ans[j]+=mp[tmp];}}for(int i=1;i<=q;i++) printf("%d\n",ans[i]);return 0;
}
Angle Beats(计算几何)相关推荐
- 2019秦皇岛ccpc A题:Angle Beats[计算几何:统计符合直角三角形的个数]+[向量hash+3hash]
题目链接 题目大意:就是已经知道一些点集合{p},然后q次询问每次给出一个点A,问你这个点和点集合里面多少对点可以构成三角形? 解题思路:很无奈这道题卡常了我们常规思路就是:我们分类讨论A这个点,因为 ...
- CCPC秦皇岛gym102361A. Angle Beats
CCPC秦皇岛gym102361A. Angle Beats 题意: 给你n个点的坐标,现在有q次询问,每次询问给你一个坐标,问这个坐标可以与给定的n个点组成多少个不同的直角三角形 n<=200 ...
- Gym - 102361A Angle Beats(几何)
题目链接:点击查看 题目大意:给出n个点,再给出m个询问,每次询问给出一个点 x,我们需要回答包括点 x 的直角三角形有多少个 题目分析:题目比较直接,数据也比较小,支持n*n的算法处理,首先我们必须 ...
- 2019年CCPC秦皇岛站部分题解
前言 感觉这套题有点难度,相比之下博主是真的菜狗. 不过只要lm队长讲明白MUV LUV EXTRA,欢姐绝杀掉Forest Program ,我再去挨个折磨,就等于菜狗博主的大胜利! Decimal ...
- [300iq Contest 1]简要题解
前言 老年选手的智商训练(1/∞) 题目链接 Angle Beats 考虑建图,发现每个∗*∗和+++的度数都为2,每个...的度数都为1 对于每个∗*∗和+++拆两个点,这两个点互相连边 对于一个∗ ...
- HTML5期末大作业:全屏页面滚动漫画风格个人主页网站设计 (HTML+CSS)
HTML5期末大作业:漫画风格个人主页网站设计--html5漫画风格个人主页全屏页面滚动模板 HTML+CSS 动漫网页HTML代码 学生网页课程设计期末作业下载 动漫大学生网页设计制作成 临近期末, ...
- 2019HDU多校补题
心得:做不出,补不动 HUD第一场: 1001 Blank Y 1002 Operation Y 1003 Milk 1004 Vication Y 1005 Path Y 1006 Typewrit ...
- 牛客 数三角(求多少个钝角三角形 极角排序)
晚上的时候PC问了一下这玩意,回忆一下极角排序 相关链接: How Many Triangles HDU - 5784(极角排序,双指针) 2019秦皇岛A - Angle Beats Gym - 1 ...
- 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 1.基本运算 1.1 判断正负函数(sgn) 1.2 点积(数量积.内积)(Dot) 1.3 向量积 ...
最新文章
- Python实现多进程的4种方式
- UA MATH575B 数值分析下VI 统计物理的随机模拟方法1
- Windows Thin PC中文化
- 移动端系列讲解之字体单位
- redis命令执行流程分析
- 6常见的HTML和CSS面试问答
- 放射性核废料处理matlab模型,放射性废物处理问题
- hash和encrypt区别及应用_转
- 自学编程的 6 个致命误区
- 正/负相比例放大中压摆率对电路带宽的影响分析
- 实战 SQL:实现百度、高德等地图中的地铁换乘线路查询
- nginx配置华为云ssl证书
- 20170925-2 功能测试
- 从零开始学前端第十七讲--微信小程序开发入门
- cpp+数据结构+设计模式
- flink+mysql+connector_Flink SQL中connector的定义和实现
- (Qt)windows下串口检测-热插拔监测、获取可用串口
- 无线传感器网络技术与应用课后习题部分答案
- Qt工程文件(二)--pro文件详解
- 一个博士(机器学习方向)关于发论文的几点忠告
热门文章
- 看了也学不会的模拟集成电路大白话系列(一)
- 我的世界服务器linux,如何在Linux上安装Minecraft服务器?
- 移动应用开发--实现微博界面(Andriod)
- 12306订票助手插件拖垮GitHub事件原因始末
- ios 应用和电脑共享文件夹_使用Documents实现windows和ios的文件共享
- Linux中硬连接(hard link)与软连接(symbolic link)的区别
- LC3-仿真器的安装
- Java4班题库-传智专修学院Java面试题库三
- 阿里云服务器上搭建微信小程序服务端环境。
- TensorFlow试用