luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
https://www.luogu.org/problemnew/solution/P2992
考虑包含原点,不包含原点的三角形有什么特征.
包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两个顶点隔开到两侧.
不包含原点的:三个顶点中只有一个顶点满足:和原点连线后,能把另外两个顶点隔开到两侧.
因此我们统计这样的三点组(x,y,z)的数目:x和原点的连线能把y和z隔开在两侧.
一共C(n,3)个三角形,包含原点的贡献3个三点组,不包含的只贡献1个.
统计三点组的数目只需要把所有点按照极角进行排序,然后枚举x.
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct point{
  int x,y;
  void read(){
    scanf("%d%d",&x,&y);
  }
  bool operator <(const point &B)const{
    return atan2(y,x)<atan2(B.y,B.x);
  }
}P[200005];
long long cross(point A,point B){
  return A.x*1ll*B.y-A.y*1ll*B.x;
}
int main(){
  int n;scanf("%d",&n);
  for(int i=1;i<=n;++i)P[i].read();
  sort(P+1,P+n+1);
  for(int i=1;i<=n;++i){
    P[n+i]=P[i];
  }
  int j=1;
  long long cnt=0;
  for(int i=1;i<=n;++i){
    while(cross(P[i],P[j+1])>0)++j;
    cnt=cnt+(j-i)*1ll*(n-1-(j-i));
  }
  printf("%lld\n",(cnt-n*1ll*(n-1)*(n-2)/6)/2);
  return 0;
}
												
											luogu P2992 [USACO10OPEN]三角形计数Triangle Counting的更多相关文章
- 【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
		
原题传送门 我们考虑进行容斥 包含原点的三角形个数=所有可能三角形的个数-不包含原点三角形的个数 对于每个点,我们会发现:将它与原点连线,在直线左边任选两点或右边任选两点与这个点构成的三角形一定是不包 ...
 - Luogu P1596 [USACO10OCT]湖计数Lake Counting
		
题目描述 Due to recent rains, water has pooled in various places in Farmer John's field, which is repres ...
 - Luogu   P2807 三角形计数
		
题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...
 - 洛谷 P2807 三角形计数
		
P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问 ...
 - [Usaco2010 OPen]Triangle Counting 数三角形
		
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 394 Solved: 1 ...
 - bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥
		
1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 272 Sol ...
 - bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形 计算机和
		
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 526 Solved: 2 ...
 - acdream.A Very Easy Triangle Counting Game(数学推导)
		
A - A Very Easy Triangle Counting Game Time Limit:1000MS Memory Limit:64000KB 64bit IO Forma ...
 - 洛谷 P1596 [USACO10OCT]湖计数Lake Counting
		
题目链接 https://www.luogu.org/problemnew/show/P1596 题目描述 Due to recent rains, water has pooled in vario ...
 
随机推荐
- Docker部署Redis容器
			
从仓库下载镜像 sudo docker pull redis 创建容器(前提:将redis.conf文件放入到/Users/chengang/docker/redis目录里面) docker ru ...
 - Unity 实现一个简单的 TPS 相机
			
效果如下: 代码如下: public class TPSCamera : MonoBehaviour { /// <summary> /// 目标对象 /// </summary&g ...
 - Windows Server平台 confluence6.7.1安装与破解
			
1.1硬件需求建议: CPU:32/64 bit 2.27GHz双核心以上之CPU: 内存:8GB以上: 硬盘:300GB,7200转以上: 建议数据库.Confluence等各自独立一台服务器. 1 ...
 - 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份
			
深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...
 - 高可用OpenStack(Queen版)集群-7.Neutron控制/网络节点集群
			
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
 - slotting filter笔记
			
1.slot filling是为了让用户的意图转化为明确的指令而补全信息的过程. 2.准入条件 从一个开放域转入到封闭域,或者从一个封闭域转入到另一个封闭域,中间的跳转是需要逻辑判断的,而这个逻辑判断 ...
 - java内存结构JVM——java内存模型JMM——java对象模型JOM
			
JVM内存结构 Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存在,而有些区 ...
 - JDK自带的监控工具方法
			
一.概述 SUN 的JDK中的几个工具,非常好用.秉承着有免费,不用商用的原则.以下简单介绍一下这几种工具.(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里(jdk的bin目录 ...
 - 实验3 --俄罗斯方块    with 20135335郝爽
			
一. 实验内容 (一)敏捷开发与XP 内容:1.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 2.极限编程(eXtreme Programming,X ...
 - iOS应用程序内打开指定qq聊天、给某人打电话
			
-(void)btn2Clik { UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSURL *url = [N ...