题目大意:
在一个平面上,有\(N\)个点,求这些点构成的直角三角形个数。
解题思路:
枚举直角顶点,对于每个点,将这个点当做原点,对其他点按极角排序,然后双指针扫一遍,判断弧度差即可。

C++ Code:

#include<bits/stdc++.h>
#define eps 1e-15
typedef long long LoveLive;
struct point{
LoveLive x,y;double deg;
inline bool operator <(const point&rhs)const{return deg<rhs.deg;}
}a[1501],b[1501];
inline int readint(){
int c=getchar(),d=0,f=0;
for(;!isdigit(c);c=getchar())f=c=='-';
for(;isdigit(c);c=getchar())d=(d<<3)+(d<<1)+(c^'0');
return f?-d:d;
}
int n;unsigned ans=0;
int main(){
n=readint();
for(int i=1;i<=n;++i)a[i].x=readint(),a[i].y=readint();
for(int i=1;i<=n;++i){
memcpy(b,a,sizeof a);
std::swap(b[i],b[1]);
for(int j=2;j<=n;++j)
b[j].deg=atan2(b[j].y-b[1].y,b[j].x-b[1].x);
std::sort(b+2,b+n+1);
int p1=2,p2=3,n1,n2;
for(;p1<=n;++p1){
n1=n2=1;
while((p2>=p1&&b[p2].deg-b[p1].deg<M_PI_2-eps)||(p2<p1&&b[p1].deg-b[p2].deg>M_PI_2*3+eps)){
++p2;
if(p2>n)p2=2;
if(p2==p1)break;
}
if(p1==p2)break;
if((p2>=p1&&b[p2].deg-b[p1].deg>M_PI_2+eps)||(p2<p1&&b[p1].deg-b[p2].deg<M_PI_2*3-eps))continue;
while(p1<n&&fabs(b[p1].deg-b[p1+1].deg)<eps)++p1,++n1;
while(p2<n&&fabs(b[p2].deg-b[p2+1].deg)<eps)++p2,++n2;
ans+=n1*n2;
}
}
printf("%u\n",ans);
return 0;
}

[COCI2007]PRAVOKUTNI的更多相关文章

  1. 『追捕盗贼 Tarjan算法』

    追捕盗贼(COCI2007) Description 为了帮助警察抓住在逃的罪犯,你发明了一个新的计算机系统.警察控制的区域有N个城市,城市之间有E条双向边连接,城市编号为1到N. 警察经常想在罪犯从 ...

随机推荐

  1. 【UOJ139】【UER #4】被删除的黑白树

    题意: 很久很久以前,有一棵树加入了 UOJ 群. 这天,在它讨论“一棵树应该怎么旋转”的时候一不小心被删除了,变成了被删除的树. 突然间,它突然发现它失去了颜色,变成了一棵纯白的树.这让它感觉很焦躁 ...

  2. C语言求大数的阶乘

    我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,该如何计算? 当一个数很大时,利用平常的方法是求不出来它的阶乘的,因为数据超出了范围.因此我们要用数组来求一个大数的阶乘,用数组的每位表示结果的 ...

  3. 理解 Javascript 执行上下文和执行栈

    如果你是一名 JavaScript 开发者,或者想要成为一名 JavaScript 开发者,那么你必须知道 JavaScript 程序内部的执行机制.理解执行上下文和执行栈同样有助于理解其他的 Jav ...

  4. SpringBoot-CommandLineRunner实现预操作

    前提:在使用SpringBoot构建项目时,我们通常需要做一些预先操作(类似开机自启动).而SpringBoot正好提供了一个简单的方式来实现–CommandLineRunner. CommandLi ...

  5. js 文档加载完成之后执行 备用

    //文档加载完成之后执行 (function(){ var _globeCallback; window.$$ = function(callback){ _globeCallback = callb ...

  6. [Design]Adobe CS6 2%错误问题

    错误描述:FATAL: Payload '{3F023875-4A52-4605-9DB6-A88D4A813E8D} Camera Profiles Installer 6.0.98.0' info ...

  7. 根据BDUSS获取用户ID信息

    代码在 /data/svndir/business/workroot2/app/ecom/ubec/getuser

  8. 分享:Android系统的经常使用权限整理

    1.ACCES_NETWORK_STATE      同意应用程序获取网络状态信息的权限 2.ACCESS_WIFI_STATE          同意应用程序获取Wi-Fi网络状态的权限 3.BAT ...

  9. BroadcastReceiver类

    java.lang.Object    ↳ android.content.BroadcastReceiver 已知直接子类 AppWidgetProvider DeviceAdminReceiver ...

  10. 【POJ 1704】 Georgia and Bob

    [题目链接] http://poj.org/problem?id=1704 [算法] 阶梯博弈 [代码] #include <algorithm> #include <bitset& ...