Advertisement

(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)

还没有任何评论哟~