这个题和UVa11529很相似。

枚举一个中心点,然后按极角排序,统计以这个点为钝角的三角形的个数,然后用C(n, 3)减去就是答案。

另外遇到直角三角形的情况很是蛋疼,可以用一个eps,不嫌麻烦的话就用整数的向量做点积。

 #include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; typedef long long LL;
const int maxn = + ;
const double PI = acos(-1.0);
const double eps = 1e-; struct Point
{
double x, y;
Point() {}
Point(double x, double y):x(x), y(y) {}
}p[maxn], p2[maxn]; Point operator - (const Point& A, const Point& B)
{
return Point(A.x-B.x, A.y-B.y);
} double ang[maxn * ]; LL inline C3(int n) { return (LL)n * (n-) / * (n-) / ; } int main()
{
//freopen("in.txt", "r", stdin);
int n, kase = ; while(scanf("%d", &n) == && n)
{
for(int i = ; i < n; i++) scanf("%lf%lf", &p[i].x, &p[i].y); LL cnt = ;
for(int i = ; i < n; i++)
{
int k = ;
for(int j = ; j < n; j++) if(j != i)
{
p2[k] = p[j] - p[i];
ang[k] = atan2(p2[k].y, p2[k].x);
ang[k + n - ] = ang[k] + PI * 2.0;
k++;
}
k = *n-;
sort(ang, ang + k);
int L, R1 = , R2 = ;
for(L = ; L < n-; L++)
{
double b1 = ang[L] + PI / ;
double b2 = ang[L] + PI;
while(ang[R1] <= b1 - eps) R1++;
while(ang[R2] < b2) R2++;
cnt += R2 - R1;
}
}
LL ans = C3(n) - cnt;
printf("Scenario %d:\nThere are %lld sites for making valid tracks\n", ++kase, ans);
} return ;
}

代码君

LA 4064 (计数 极角排序) Magnetic Train Tracks的更多相关文章

  1. UVaLive 4064 Magnetic Train Tracks (极角排序)

    题意:给定 n 个不三点共线的点,然后问你能组成多少锐角或者直角三角形. 析:可以反过来求,求有多少个钝角三角形,然后再用总的减去,直接求肯定会超时,但是可以枚举每个点,以该点为钝角的那个顶点,然后再 ...

  2. LA 4064 Magnetic Train Tracks

    题意:给定平面上$n(3\leq n \leq 1200)$个无三点共线的点,问这些点组成了多少个锐角三角形. 分析:显然任意三点可构成三角形,而锐角三角形不如直角或钝角三角形容易计数,因为后者有且仅 ...

  3. hdu-5738 Eureka(组合计数+极角排序)

    题目链接: Eureka Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pr ...

  4. [CF1025F]Disjoint Triangles[极角排序+组合计数]

    题意 平面上有 \(n\) 个点,选出六个点构成两个三角形,问有多少种构造方式使得两个三角形没有交集. \(n\leq 2000\) 分析 枚举连接两个三角形的两个顶点,同时能够将两个三角形划分在直线 ...

  5. POJ 1696 Space Ant 【极角排序】

    题意:平面上有n个点,一只蚂蚁从最左下角的点出发,只能往逆时针方向走,走过的路线不能交叉,问最多能经过多少个点. 思路:每次都尽量往最外边走,每选取一个点后对剩余的点进行极角排序.(n个点必定能走完, ...

  6. Space Ant---poj1696(极角排序)

    题目链接:http://poj.org/problem?id=1696 题意:给你n个点,然后我们用一条线把它们连起来,形成螺旋状: 首先找到左下方的一个点作为起点,然后以它为原点进行极角排序,找到极 ...

  7. poj2280Amphiphilic Carbon Molecules(极角排序)

    链接 卡了几天的破题,对于hdu的那份数据,这就一神题.. 借助极角排序,枚举以每一个点进行极角排序,然后构造两条扫描线,一个上面一个下面,两条同时走,把上线和下线的点以及上线左边的点分别统计出来,如 ...

  8. LightOJ 1285 - Drawing Simple Polygon (几何,极角排序)

    1285 - Drawing Simple Polygon   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...

  9. 简单几何(极角排序) POJ 2007 Scrambled Polygon

    题目传送门 题意:裸的对原点的极角排序,凸包貌似不行. /************************************************ * Author :Running_Time ...

随机推荐

  1. jsp include

    1.<%@ include file="a.jsp"%> 路径无法动态赋值,只能写成固定路径: 生成一个jsp页面,整个编译 2.<jsp:include pag ...

  2. 自己写一个websocket

    import socket, base64, hashlib sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsock ...

  3. Python文件将日志文件中每天的日志拿出来

    file_log.txt文件内容如下: with open('file_log.txt', 'r', encoding='utf-8') as f: for i in f: s = i.split() ...

  4. Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) M

    Description The marmots have prepared a very easy problem for this year's HC2 – this one. It involve ...

  5. Travelling HDU - 3001

    Travelling HDU - 3001 方法:3进制状态压缩dp(更好的方法是预处理出每个状态数字对应的y数组,然后用刷表,时间复杂度可以少一个n) #include<cstdio> ...

  6. UVa 1220 Party at Hali-Bula 晚会

    #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #i ...

  7. 转 做了两款数据库监控工具(mysql and nosql),打算在近期开源

    http://www.cnblogs.com/leefreeman/p/7297549.html 监控指标:https://www.linuxidc.com/Linux/2015-08/122009. ...

  8. Ionic之增加样式会自动换行解决方案

    设置样式的时候,引用自身的样式,能正常显示,但是引用自定义样式显示的时候,竟然或自动换行,好尴尬. 原本代码: $('.codeSuccess').css({'display':'block'}); ...

  9. 基于 Web 的 Go 语言 IDE - Wide 1.5.0 发布!

    Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译. ...

  10. 如何用sql server数据库恢复.bak数据库备份

    @hcy(黄灿奕) 之前有两次都恢复不了,折腾了很长时间,这一次碰到这样的问题,居然又忘了,又捣鼓了很长时间,现在记下来 1.右击SQL Server 2008实例下的“数据库”文件夹.就是与安全性. ...