原题传送门

我们考虑进行容斥

包含原点的三角形个数=所有可能三角形的个数-不包含原点三角形的个数

对于每个点,我们会发现:将它与原点连线,在直线左边任选两点或右边任选两点与这个点构成的三角形一定是不包含原点的

对于每个点都这样计算,累加,会发现有算重复的(但不会少情况,自己画画图就民白了),所以每次只选这个点向量的半平面上的两个点

这样我们珂以对所有点进行极角排序,这样就珂以做到线性

代码中有几点要注意:1.特判点数小于3 \(\quad\) 2.long long

#include <bits/stdc++.h>
#define db double
#define ll long long
#define N 100005
#define getchar nc
using namespace std;
inline char nc(){static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{register int x=0,f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;
}
inline void write(register ll x)
{if(!x)putchar('0');if(x<0)x=-x,putchar('-');static int sta[20];register int tot=0;while(x)sta[tot++]=x%10,x/=10;while(tot)putchar(sta[--tot]+48);
}
const db Pi=acos(-1.0);
const db eps=1e-10;
struct point{int x,y;db k;inline void cal(){k=atan2(y,x);}bool operator <(const point &b) const{return k<b.k;}
}p[N<<1];
int n,sum;
ll ans;
int main()
{n=read();for(register int i=1;i<=n;++i){int x=read(),y=read();p[i]=(point){x,y};p[i].cal();}if(n==1||n==2){puts("0");return 0;}ans=1ll*n*(n-1)*(n-2)/6;sort(p+1,p+1+n);for(register int i=n+1;i<=n<<1;++i)p[i]=p[i-n],p[i].k+=2*Pi;int l=0,r=0;for(register int i=1;i<=n;++i){l=i+1;while(p[r+1].k+eps<p[i].k+Pi)++r;ans-=1ll*(r-l+1)*(r-l)/2;}write(ans);return 0;
}

转载于:https://www.cnblogs.com/yzhang-rp-inf/p/11160803.html

【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting相关推荐

  1. P2807 三角形计数(c++)

    题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入格式 第一行为 ...

  2. 69 三角形计数(Triangle Count)

    文章目录 1 题目 2 解决方案 2.1 思路 2.2 时间复杂度 2.3 空间复杂度 3 源码 1 题目 题目:三角形计数(Triangle Count) 描述:给定一个整数数组,在该数组中,寻找三 ...

  3. NYOJ 982 Triangle Counting (数学题)

    Triangle Counting 时间限制:1000 ms  |  内存限制:65535 KB 描述 You are given n rods of length 1, 2-, n. You hav ...

  4. Triangle Counting【数学】

    Triangle Counting UVA - 11401 题目传送门 题目大意:输入一个整数n,求在1到n中选取三条边能够组成多少种三角形. AC代码: #include <cstdio> ...

  5. uva11401:Triangle Counting 递推 数学

    uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...

  6. nvGRAPH三角形计数和遍历示例

    nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...

  7. C语言计数排序Counting sort 算法(附完整源码)

    计数排序Counting sort 算法 计数排序Counting sort 算法的完整源码(定义,实现,main函数测试) 计数排序Counting sort 算法的完整源码(定义,实现,main函 ...

  8. UVA 11401 Triangle Counting(详解)

    Triangle Counting 分析一下 以八为例子 1 2 3 4 5 6 7 8 以(7,8)为边,就有6 7 8, 5 7 8, 4 7 8 ,3 7 8 ,2 7 8 五种情况: 以(6, ...

  9. UVA 11401 - Triangle Counting

    Problem G Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of le ...

  10. 题解 luogu P2568 GCD

    题解 luogu P2568 GCD 时间:2019.3.11 欧拉函数+前缀和 题目描述 给定整数\(N\),求\(1\le x,y \le N\)且\(\gcd(x,y)\)为素数的数对\((x, ...

最新文章

  1. 如何设计一个本地缓存
  2. 答应我,调试Python代码,不要再用Print了!
  3. Android 自定义dialog
  4. 快递100接口的调用过程
  5. 飞鸽传书 2010Beta2.0正式版预计本月内即可上线
  6. 使用C语言文件合并再排序
  7. opencv 修改图像数值_【1】Introduction to OpenCV (2)使用VS生成OpenCV应用程序
  8. InfluxDb系列:几个关键概念(主要是和关系数据库做对比)
  9. Visual Studio 2015 初体验
  10. 3.Linux 高性能服务器编程 --- TCP 协议详解
  11. linux 编译cgal,CGAL Bindings python Linux(Ubuntu) 安装配置 使用 CGAL-5.0.2库
  12. Java DAO、Service、web理解之DAO层
  13. gets和puts基本用法。
  14. Android真机连接局域网PC服务器的方法
  15. 什么是单工,半双工,全双工
  16. 300最不常用的springboot计算机毕业设计题目汇总,总有你需要用到的
  17. referer与referrer
  18. IOS高级开发~开机启动无限后台运行监听进程
  19. 沉浸式过山车 梦幻新体验
  20. 只有网安人才知道的事情!

热门文章

  1. 两个常见小故障的修复
  2. 【R包】2018年数据科学前20名R包
  3. 大吉大利,今晚如何用R语言解锁“吃鸡”正确姿势
  4. 左手用R右手Python系列16——XPath与网页解析库
  5. Python全栈开发记录_第六篇(生成器和迭代器)
  6. c++中的c_str()函数
  7. Thinking in Java Chapter 14
  8. SAStruts アクションにJSONを返すメソッドを作成してみる
  9. HttpModule和HttpHandler的常见用法
  10. Deepin-15.10-custom-LiveCD 定制版本已经发布