【USACO10 OPEN】三角形计数

题面

https://www.luogu.org/problem/P2992

题解

如果一个三元点集构成黄金三角形,则他们对原点的夹角加起来为$2\pi$,

所以考虑补集转换,不构成黄金三角形的三元点集,可以画一条过原点的直线,使他们都在直线一边。

枚举直线,双指针。

注意这题$atan2(y,x)$精度是足够的,因为有保证。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define ri register int
#define N 205000

using namespace std;
const double pi=acos(-1.0);

int n;
double ang[N],x,y;

int main() {
  scanf("%d",&n);
  for (ri i=1;i<=n;i++) {
    scanf("%lf %lf",&x,&y);
    ang[i]=atan2(y,x)+pi;
  }
  sort(ang+1,ang+n+1);
  for (ri i=n+1;i<=2*n;i++) ang[i]=ang[i-n]+2*pi;
  int p=1;
  LL ans=0;
  for (ri i=n+1;i<=2*n;i++) {
    while (ang[i]-ang[p]>pi) p++;
    if (i-p-1>=0) ans+=(i-p)*1LL*(i-p-1);
  }
  cout<<n*1LL*(n-1)*1LL*(n-2)/6-ans/2<<endl;
}

原文地址:https://www.cnblogs.com/shxnb666/p/11444213.html

时间: 2024-10-28 19:47:00

【USACO10 OPEN】三角形计数的相关文章

Java实现三角形计数

题: 解: 这道题考的是穷举的算法. 一开始看到这道题的时候,本能的想到用递归实现.但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常.我查了一下,原因是使用递归创建了太多的变量, 每个变量创建的时候都会有一个“栈帧”,而Java虚拟机对栈帧有限制,不能超出一个范围. 并且递归和循环相比,递归的效率明显比循环低下,如果想要写一个算法的话,尽量不要使用递归,一方面是因为递归会创建很多变量,占用内存,另一方面是递归极容 易无限递归. --------------- 最后使用循环嵌套的方式完成了

洛谷 P2807 三角形计数

P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入格式: 第一行为整数t(≤100),表示测试数据组数:接下来t行,每行一个正整数n(≤500). 输出格式: 对于每个n,输出一个正整数,表示三角形个数. 输入输出样例 输入样例#1: 复制 3 1 2 3 输出样例#1: 复制 1 5 13 说明 n(≤500) t(≤10

611. Valid Triangle Number三角形计数

[抄题]: 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形? [暴力解法]: 全部都用for循环 时间分析: 空间分析: [思维问题]: 可以用两层循环:for循环中嵌套while,用过但是没意识 [一句话思路]: [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: [一刷]: [二刷]: [三刷]: [四刷]: [五刷]: [五分钟肉眼debug的结果]: [总结]:

luogu P2992 [USACO10OPEN]三角形计数Triangle Counting

https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两个顶点隔开到两侧. 不包含原点的:三个顶点中只有一个顶点满足:和原点连线后,能把另外两个顶点隔开到两侧. 因此我们统计这样的三点组(x,y,z)的数目:x和原点的连线能把y和z隔开在两侧. 一共C(n,3)个三角形,包含原点的贡献3个三点组,不包含的只贡献1个. 统计三点组的数目只需要把所有点按照极

NYOJ491幸运三角形

幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况): 如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2). 输入 有多组测试数据(少于20组).每行含一个整数n(0

回溯法--符号三角形问题

问题描述: 如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”. - + + - + + +   - + - - + +    - - + - +     + - - -      - + +       - +        - 在一般情况下,符号三角形的第一行有n个符号, 符号三角形问题要求对于给定的n, 计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同.  解题思路: 1.不断改变第一行每个符号,搜索符合条件的解,可以使用

回溯法之符号三角形问题

/*回溯法解符号三角形问题 问题描述: 如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”. - + + - + + + - + - - + + - - + - + + - - - - + + - + - 在一般情况下,符号三角形的第一行有n个符号, 符号三角形问题要求对于给定的n, 计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同. 解题思路: 1.不断改变第一行每个符号,搜索符合条件的解,可以使用递归回溯 为了便于运算,设+

Spark认识

Spark背景:在Spark出现前,要在一个平台内同时完成批处理.机器学习.流失计算.图计算.SQL查询等各种大数据分析人物,就不得不与多种独立的系统打交道,这需要系统间进行代价较大的数据转储.Spark一开始就瞄准了性能,实现了在内存中计算. 1.Spark为什么这么火?采用的编程语言有什么特点? Spark是基于内存的迭代计算框架,适用于需要多种操作特定数据集的应用场合,如pageRank.K-means等算就非常适合内存迭代计算,Spark整个生态体系正逐渐完善.Graphx.SparkS

PS基础

2013年7月,Adobe公司推出新版本photoshop——Photoshop CC(Creative Cloud).在Photoshop CS6功能的基础上,Photoshop CC新增相机防抖动功能.CameraRAW功能改进.图像提升采样.属性面板改进.Behance集成等功能,以及Creative Cloud,即云功能. 继2012年Adobe推出Photoshop CS6版本后,Adobe又在MAX大会上推出了最新版本的Photoshop CC (Creative Cloud).在主