bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形

USACO划水中。。。

题目中要求经过原点的三角形数目,但这种三角形没什么明显的特点并不好求,所以可以求不经过原点的三角形数量。

对于一个非法三角形,它离原点最近的那条边连接的两个点所连的两条边一定在这个点与原点连线的一侧。

为了不重的计数,只用极角序最小的点算。

实现的时候可以把原数组复制一遍再用一个指针。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200005;
int n;
ll ans;
struct node
{
	double x,y,ang;
	friend bool operator < (const node &aa,const node &bb)
	{
		return aa.ang<bb.ang;
	}
	friend double operator * (const node &aa,const node &bb)
	{
		return aa.x*bb.y-aa.y*bb.x;
	}
}a[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);
	for(int i=1;i<=n;i++)a[i].ang=atan2(a[i].y,a[i].x);
	sort(a+1,a+n+1);
	for(int j=1;j<=n;j++)a[n+j]=a[j];
	int t=0,r=1;
	for(int i=1;i<=n;i++)
	{
		while(r<i+n-1&&a[i]*a[r+1]>0)r++,t++;
		ans+=1LL*t*(t-1)/2;
		t--;
	}
	printf("%lld\n",1LL*n*(n-1)*(n-2)/6-ans);
	return 0;

  

时间: 2024-12-23 16:55:09

bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形的相关文章

bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥

1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 272  Solved: 143[Submit][Status] Description 在 一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她睡 着了.想象牧场是一个X,Y平面的网格.她将N

bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序

Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她睡着了.想象牧场是一个X,Y平面的网格.她将N只奶牛标记为1-N (1 <= N <= 100,000),每只奶牛的坐标为X_i,Y_i (-100,000 <= X_i <= 100,000;-100,000 <= Y_i <= 100,000; 1 <= i &l

[Usaco2010 OPen]Triangle Counting 数三角形

[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 394  Solved: 198[Submit][Status][Discuss] Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她睡着了.想象牧场是一个X,Y平面的网格.她将

BZOJ1914 [Usaco2010 OPen]Triangle Counting 数三角形

hzwer已经说的很好了,在此只能跪烂了 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42

BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘

题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec  Memory Limit: 128 MB Description 农夫约翰的农场可以表示成N×M(1≤N,M≤100)个方格组成的矩形.由于近日的降雨, 在约翰农场上的不同地方形成了池塘.每一个方格或者有积水(’W’)或者没有积水(’.’).农夫约翰打算数出他的农场上共形成了多少池塘.一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的. 现

数三角形 bzoj 1201

数三角形(1s 128MB)triangle [题目描述] 小苏看到一个这样的等边三角形:该等边三角形每边的长度为n且被分成n等份,于是每条边就有n-1个等分点.而整个三角形被连接两个不同边的等分点且平行于三角形的第三边的线段分成了n2个单位等边三角形(边长为1).下图左是n=5的情形: 小苏想知道,删除其中的一些短边后,剩下的边一共组成多少个三角形(包括所有边长为m的三角形),正立的和倒立的都算,只要三角形的3m条短边都没有被删除就算是组成一个三角形).例如,上图右就存在19个三角形. [输入

BZOJ 3505: [Cqoi2014]数三角形( 组合数 )

先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不合法方案cnt比较麻烦. 枚举对角线(左下-右上), 即(0, 0)-(x, y), 我们发现这种情况有(n-y)*(m-x)*2(算上左上-右下的)种, 然后中间有gcd(x, y)-1个点(不合法), 乘起来就好了. ---------------------------------------

【BZOJ 3505】 [Cqoi2014]数三角形

3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 664 Solved: 403 [Submit][Status][Discuss] Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Inpu

Bzoj 3505: [Cqoi2014]数三角形 数论

3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits Description Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 输入1: 1 1 输入2: 2 2 Sample Output 输出1: 4 输出2: 76 Data Constraint 对于30%的数据 1<=m,n<=10 对于1