bzoj1914[Usaco2010 OPen]Triangle Counting 数三角形 极角排序+乱搞
来源:互联网 发布:如何判定论文数据造假 编辑:程序博客网 时间:2024/06/15 00:31
题意:给出一些点,问你有多少个三角形能覆盖原点。
我们首先可以通过正难则反的原则,把题目转化为求不能覆盖原点的方案数。
总方案数是n*(n-1)*(n-2)/6.
先把所有点极角排序,然后扫过去,我们对于一个当前点i,他和原点的连线一定能把他所在的象限分成两个平面,对于线段左边的一个平面(当然你也可以选择右边),其中任意两个点x,y和i相连,肯定不会覆盖原点,所以通过这种方法就能够做到较快统计答案,而且不会算重算漏。
注意开ll
code:
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;int n,m;typedef long long ll;const int N=2e5+5;struct node{ ll x,y; double z;}a[N];ll ans;bool cmp(node a,node b){ return a.z<b.z;}ll operator*(node a,node b){ return a.x*b.y-a.y*b.x;}bool operator<(node a,node b){ return a.z<b.z;}int main(){ scanf("%d",&n); fo(i,1,n) { scanf("%lld%lld",&a[i].x,&a[i].y); a[i].z=atan2(a[i].y,a[i].x); } sort(a+1,a+1+n); int r=1,t=0; fo(i,1,n) { while ((r%n+1)!=i&&a[i]*a[r%n+1]>=0)t++,r++; ans+=(ll)t*(t-1)/2; t--; }; printf("%lld\n",(ll)n*(n-1)*(n-2)/6-ans); return 0;}
0 0
- bzoj1914[Usaco2010 OPen]Triangle Counting 数三角形 极角排序+乱搞
- [BZOJ1914][Usaco2010 OPen]Triangle Counting 数三角形
- 【bzoj1914】[Usaco2010 OPen]Triangle Counting 数三角形
- BZOJ1914: [Usaco2010 OPen]Triangle Counting 数三角形(极角排序)
- 【bzoj1914】[Usaco2010 OPen]Triangle Counting 数三角形 计算几何
- bzoj1914 Triangle Counting 数三角形【极角排序】
- BZOJ 1914: [Usaco2010 OPen]Triangle Counting 数三角形
- uva11401 - Triangle Counting(数三角形)
- UVa11041 Triangle Counting 数三角形 题解
- UVa 11401 Triangle Counting 数三角形
- UVA 11401 Triangle Counting数三角形
- UVA 11401 - Triangle Counting 数三角形(推理)
- uva 11401 Triangle Counting 数三角形 递推
- [USACO Open10]数三角形Triangle Counting解题报告
- ACdream 1008 A Very Easy Triangle Counting Game 数三角形
- uva 11401 Triangle Counting 数三角形 (计数问题)
- 洛谷P2992 [USACO10OPEN]三角形计数Triangle Counting
- NKOJ 4252 数三角形(乱搞)
- 简单工厂模式(Simple Factory Pattern(静态工厂方法模式)对象创建型模式)
- android listview设置选中时的item的背景色
- 二叉树梳理
- 微信小程序使用RESTFul获取豆瓣API
- 写给省选前的自己V2
- bzoj1914[Usaco2010 OPen]Triangle Counting 数三角形 极角排序+乱搞
- CSRF XSS Cookies 的一些见解
- 利用Handler.post(runnable)替代Thread来做周期循环的事情
- 堆/平衡树——Luogu1801 黑匣子_NOI导刊2010提高(06)
- NV_RESTORE宏的作用及清除的方法
- Android Splash 的最佳实践
- 从源码的角度分析,getWidth() 与 getMeasuredWidth() 的不同之处
- 线程封装类(2)
- Linux文件管理