(2019年CCPC秦皇岛站) A - Angle Beats (计算几何)
发布时间
阅读量:
阅读量
解: 未曾接触过几何类题目,但依然尝试分析该问题,其核心思路较为基础,可划分为两种情况。第一种情况是将询问点作为直角顶点,再从其余点中选取一个,计算对应的斜率,并确定另一条边上的对应点;第二种情况则是询问点并非直角顶点,此时需要将其他点视为直角顶点,并据此更新q次查询的结果。
接下来是如何避免超时的问题,观察到一种利用map结构进行维护的写法非常巧妙。其中键为向量形式的斜率,值则记录出现次数。然而我们可以通过将所有向量统一映射至第一、二象限来优化处理方式。因为对于某条边而言,顺时针与逆时针方向形成的直角本质上是相同的,在此情况下可将其归为同一类别。因此可通过(-x,-y)的方式实现统一转换。
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define SZ(a) int((a).size())
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int N=2e3+5;
/
全部评论 (0)
还没有任何评论哟~
