LA 4064 Magnetic Train Tracks (极角排序)
来源:互联网 发布:淘宝澳洲代购推荐 编辑:程序博客网 时间:2024/05/17 19:20
LA 4064 Magnetic Train Tracks
题目大意:
在平面上给n个点(任意三点不共线),问这些点共组成了多少锐角或者直角三角形.
(
题目分析:
锐角三角形必须满足三个角都为锐角,并不利于统计.尝试统计不是锐角或者直角三角形,即——统计钝角三角形的个数.
统计钝角三角形只需要找到钝角即可,且钝角三角形仅有一个钝角,不会出现重复的情况.
如何统计钝角三角形?
选择极角排序,尝试固定一个中心点,计算出其他所有点与该点形成的极角,排序.
若再确定一个选取点,那么只要是其他能与中心点和选取点构成钝角的三角形皆为钝角三角形.
如上图所示,确定了中心点和选取点后,在B区域内的点可构成钝角三角形.
因为排序之后的极角是单调递增的,所以只需要一次扫描过去即可统计某一中心点形成的所有钝角三角形.
(但是好像本题必须要加eps,不然会WA)
代码:
#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const double eps=1e-10;const double PI=acos(-1);const int maxn=1200+5;int x[maxn],y[maxn],n;double de[maxn*2];int count(int c){ int cnt=0; for(int i=0;i<n;i++) if(i!=c) de[cnt++]=atan2(y[i]-y[c],x[i]-x[c]); sort(de,de+n-1); for(int i=0;i<n-1;i++) de[i+n-1]=de[i]+2*PI; int pos1=0,pos2=0,ret=0; for(int i=0;i<n-1;i++) { while(de[pos1]-de[i]+eps<=PI/2) ++pos1;//这里若不加eps,会WA掉 while(de[pos2]-de[i]<PI) ++pos2; ret+=pos2-pos1; } return ret;}int solve(){ if(n<3) return 0; int tot=0; for(int i=0;i<n;i++) tot+=count(i); return n*(n-1)*(n-2)/6-tot;}int main(){ int kase=0; while(scanf("%d",&n)==1&&n) { for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); printf("Scenario %d:\nThere are %d sites for making valid tracks\n",++kase,solve()); } return 0;}
0 0
- LA 4064 Magnetic Train Tracks (极角排序)
- LA 4064 Magnetic Train Tracks
- LA 4064 Magnetic Train Tracks
- UVA - 12123 Magnetic Train Tracks
- UVA 12123 Magnetic Train Tracks
- UVa 12123 - Magnetic Train Tracks
- UVA 12123 - Magnetic Train Tracks(计数问题)
- 11586 - Train Tracks
- UVa 11586 - Train Tracks
- LA-4064(极角排序)
- uva 11586 - Train Tracks(水题)
- 排序/查找 299 - Train Swapping
- 排序检索 299 train swapping
- Magnetic Storms
- LA 2572 圆盘的相互覆盖问题,圆弧极角排序,中点代替圆弧,轻微扰动的影响判断
- LA 4255 UVa1423 拓扑排序
- LA 4255 Guess 拓扑排序
- LA 4850 Installations (排序+枚举)
- 使用pypi镜像源加速第三方库在线安装
- 如何让你的linux程序在后台静默执行?
- C语言实验——保留字母
- 【hpuoj】大数A+B
- 历史上的重大软件BUG启示录第7篇---美国商务航空公司的烦恼
- LA 4064 Magnetic Train Tracks (极角排序)
- 4006: [JLOI2015]管道连接
- 【LeetCode】 292. Nim Game
- 基于TI-RTOS的CC2650DK开发(17)---支持模块
- 【hpuoj】天平平衡
- 第1章 形成Becoming
- C语言实验——大小写转换
- 三部排序
- 【hpuoj】KACA的数字排序