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(计算几何)相关推荐

  1. 2019秦皇岛ccpc A题:Angle Beats[计算几何:统计符合直角三角形的个数]+[向量hash+3hash]

    题目链接 题目大意:就是已经知道一些点集合{p},然后q次询问每次给出一个点A,问你这个点和点集合里面多少对点可以构成三角形? 解题思路:很无奈这道题卡常了我们常规思路就是:我们分类讨论A这个点,因为 ...

  2. CCPC秦皇岛gym102361A. Angle Beats

    CCPC秦皇岛gym102361A. Angle Beats 题意: 给你n个点的坐标,现在有q次询问,每次询问给你一个坐标,问这个坐标可以与给定的n个点组成多少个不同的直角三角形 n<=200 ...

  3. Gym - 102361A Angle Beats(几何)

    题目链接:点击查看 题目大意:给出n个点,再给出m个询问,每次询问给出一个点 x,我们需要回答包括点 x 的直角三角形有多少个 题目分析:题目比较直接,数据也比较小,支持n*n的算法处理,首先我们必须 ...

  4. 2019年CCPC秦皇岛站部分题解

    前言 感觉这套题有点难度,相比之下博主是真的菜狗. 不过只要lm队长讲明白MUV LUV EXTRA,欢姐绝杀掉Forest Program ,我再去挨个折磨,就等于菜狗博主的大胜利! Decimal ...

  5. [300iq Contest 1]简要题解

    前言 老年选手的智商训练(1/∞) 题目链接 Angle Beats 考虑建图,发现每个∗*∗和+++的度数都为2,每个...的度数都为1 对于每个∗*∗和+++拆两个点,这两个点互相连边 对于一个∗ ...

  6. HTML5期末大作业:全屏页面滚动漫画风格个人主页网站设计 (HTML+CSS)

    HTML5期末大作业:漫画风格个人主页网站设计--html5漫画风格个人主页全屏页面滚动模板 HTML+CSS 动漫网页HTML代码 学生网页课程设计期末作业下载 动漫大学生网页设计制作成 临近期末, ...

  7. 2019HDU多校补题

    心得:做不出,补不动 HUD第一场: 1001 Blank Y 1002 Operation Y 1003 Milk 1004 Vication Y 1005 Path Y 1006 Typewrit ...

  8. 牛客 数三角(求多少个钝角三角形 极角排序)

    晚上的时候PC问了一下这玩意,回忆一下极角排序 相关链接: How Many Triangles HDU - 5784(极角排序,双指针) 2019秦皇岛A - Angle Beats Gym - 1 ...

  9. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 1.基本运算 1.1 判断正负函数(sgn) 1.2 点积(数量积.内积)(Dot) 1.3 向量积 ...

最新文章

  1. Python实现多进程的4种方式
  2. UA MATH575B 数值分析下VI 统计物理的随机模拟方法1
  3. Windows Thin PC中文化
  4. 移动端系列讲解之字体单位
  5. redis命令执行流程分析
  6. 6常见的HTML和CSS面试问答
  7. 放射性核废料处理matlab模型,放射性废物处理问题
  8. hash和encrypt区别及应用_转
  9. 自学编程的 6 个致命误区
  10. 正/负相比例放大中压摆率对电路带宽的影响分析
  11. 实战 SQL:实现百度、高德等地图中的地铁换乘线路查询
  12. nginx配置华为云ssl证书
  13. 20170925-2 功能测试
  14. 从零开始学前端第十七讲--微信小程序开发入门
  15. cpp+数据结构+设计模式
  16. flink+mysql+connector_Flink SQL中connector的定义和实现
  17. (Qt)windows下串口检测-热插拔监测、获取可用串口
  18. 无线传感器网络技术与应用课后习题部分答案
  19. Qt工程文件(二)--pro文件详解
  20. 一个博士(机器学习方向)关于发论文的几点忠告

热门文章

  1. 看了也学不会的模拟集成电路大白话系列(一)
  2. 我的世界服务器linux,如何在Linux上安装Minecraft服务器?
  3. 移动应用开发--实现微博界面(Andriod)
  4. 12306订票助手插件拖垮GitHub事件原因始末
  5. ios 应用和电脑共享文件夹_使用Documents实现windows和ios的文件共享
  6. Linux中硬连接(hard link)与软连接(symbolic link)的区别
  7. LC3-仿真器的安装
  8. Java4班题库-传智专修学院Java面试题库三
  9. 阿里云服务器上搭建微信小程序服务端环境。
  10. TensorFlow试用