CCPC秦皇岛gym102361A. Angle Beats

题意:

给你n个点的坐标,现在有q次询问,每次询问给你一个坐标,问这个坐标可以与给定的n个点组成多少个不同的直角三角形
n<=2000,q<=2000

题解:

正解貌似是用极角排序后尺取得到答案,但我看很多人有更简便的方法
对于每次询问,我们可以分别考虑被询问点是直角点还是非直角点
如果是直角点,我们可以先将n个点与被询问点的斜率存下来,然后再循环n个点,看有多少个点是可以构成直线(即斜率乘积为-1)
如果是非直角点,我们可以直接n2n^2n2枚举n个点,然后判断是否可以构成直角
这个题原理很简单,细节很多,首先斜率直接存很麻烦,我们存横纵坐标。其次map跑的很慢,因此加map的值时可以先判断map中是否存有对应的参数,否则会T
详细见代码

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
bool Handsome;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test(bool &Most)
{#ifdef ONLINE_JUDGE
#elseprintf("%.2lfMB\n",(&Most-&Handsome)/1024.0/1024.0);startTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=2e4+9;
bool Most;
struct Point{ll x,y;Point(){}Point(ll _x,ll _y){x=_x;y=_y;}void input(){read(x,y);}Point update()const{if(x<0||(x==0&&y<0))return Point(-x,-y);else return Point(x,y);}bool operator<(const Point &b)const{Point A=update(),B=b.update(); return A.x*B.y<A.y*B.x;}Point operator-(const Point &b)const{return Point(x-b.x,y-b.y); }
}point[maxn];
int ans[maxn];
map<Point,int>mp;
vector<Point>vec;
int main()
{rd_test(Most);int n,q;read(n,q);for(int i=1;i<=n;i++)point[i].input();for(int i=0;i<q;i++){mp.clear();Point q;q.input();vec.push_back(q);for(int j=1;j<=n;j++)mp[point[j]-q]++;for(auto it:mp){Point tmp(-it.first.y,it.first.x);if(mp.count(tmp))ans[i]+=mp[tmp]*it.second;}ans[i]/=2;}for(int i=1;i<=n;i++){//n个点分别为直角 mp.clear();for(int j=1;j<=n;j++){if(i==j)continue;mp[point[j]-point[i]]++;}for(int j=0;j<q;j++){Point tmp=vec[j]-point[i];tmp=Point(-tmp.y,tmp.x);if(mp.count(tmp))ans[j]+=mp[tmp];}}for(int i=0;i<q;i++)printf("%d\n",ans[i]);
//      cout<<ans[i]<<endl; //Time_test();
}

CCPC秦皇岛gym102361A. Angle Beats相关推荐

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

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

  2. Angle Beats(计算几何)

    Angle Beats(计算几何) 思路:mapmapmap排序+暴力枚举. 分两种情况:1.Q[i]1.Q[i]1.Q[i]作为直角顶点.2.Q[i]2.Q[i]2.Q[i]不作为直角顶点. 此题最 ...

  3. MUV LUV UNLIMITED(ccpc 秦皇岛2019)

    MUV LUV UNLIMITED(ccpc 秦皇岛2019) 题目描述 There are few entertainments in United Nations 11th Force, Paci ...

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

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

  5. 2019 CCPC 秦皇岛: MUV LUV EXTRA

    MUV LUV EXTRA (本篇主要内容,kmp求最短循环节) 题目传送门: MUV LUV EXTRA 题意: 给你一个字符串和两个整数a和b.在小数点后,找到一个循环节 l,循环长度为p.求 a ...

  6. 2019 CCPC秦皇岛 K.MUV LUV UNLIMITED(博弈)

    2019CCPC秦皇岛K 题意: 两个人玩游戏, 有一棵有根树,每次只能拿叶子节点若干个(不能不拿),问最后谁会赢 思路: 先说结论,数每个叶子节点对应上去的那条链(直到他的父亲除自己外有另外的儿子结 ...

  7. 2018 CCPC秦皇岛站日记

    三题93名铜前,还可以 9/25 明天就要去秦皇岛了,感觉好,麻烦啊...这里就不激动了,因为要忙好多东西. 首先是我准备了几天的模板,因为第一次比赛的原因,所以我也是第一次准备这种比较正式的模板.除 ...

  8. 【HDU6742 2019 CCPC 秦皇岛 】MUV LUV ALTERNATIVE 曼哈顿剧院 两出口观众逃生最短时间

    应岛娘邀请,自费机票回国打比赛. 队名--友谊是魔法.最终榜单如下--https://ccpc.io/post/187 这题是场上的L题. 一年多不写题也不想题情况下遇上了这场比赛的L题.是个贪心题, ...

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

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

最新文章

  1. http://www.himigame.com/mac-cocoa-application/893.html
  2. ZedGraph给LineChart添加数值
  3. 世界地板大会姚红鹏的三问
  4. IOS开发之__bridge,__bridge_transfer和__bridge_retained
  5. 最常见的13种主数据管理(MDM)词汇和定义
  6. mysql数据没有同步更新_解决MySQL的主从数据库没有同步的两种方法
  7. 工业交换机:如果出现了物理性故障该怎么判断?
  8. php+静态变量的初始值,php 静态变量的初始化
  9. 挖矿区块链_使用Java语言从零开始创建区块链
  10. 【ACM竞赛】 动态规划
  11. java activiti 工作流引擎_Activiti工作流引擎简介详解
  12. 肯耐珂萨java_站在尤里奇的肩膀上,肯耐珂萨探讨适用于国内的HR胜任力模型
  13. 微新小程序封装wx.request (使用回调函数)
  14. VMware15.1安装苹果系统mac10.15.3(图解)
  15. ARM与Calxeda/华芯通
  16. 基于树的机器学习模型的演化
  17. 华为P30震撼来袭!刘海屏+麒麟980+3650mAh,网友直呼:年度机皇呀
  18. 会计凭证替代BTE增强
  19. 从百度识图效果对智能识图的一些思考
  20. Inventor冲压加强筋_Inventor教程之创建加强筋

热门文章

  1. 需要多快的速度,才能在抽走桌布之后保持桌面物体不掉?
  2. 勾股定理的形象拆分法,原来数学可以这么好玩!
  3. 你的输入法都暴露了些啥?
  4. 干货|MIT线性代数课程精细笔记[第二课]
  5. 因为加班,谈了7年的女友跟我分手了……
  6. vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...
  7. ORACLE数据加载加本,使用oracle sqlldr加载数据
  8. ueditor 编辑html文件名,UEditor编辑器自定义上传图片或文件路径的修改方法,ueditor修改方法...
  9. 在栈中压入一个字符串c语言,面试题 31:栈的压入、弹出序列
  10. row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别