[solution] JZOJ3493 三角形
[solution] JZOJ3493 三角形
Description
平面上有n个点,求出用这些点可以构成的三角形数。
Input
第一行一个整数n。
接下来n行,每行两个整数,表示点的坐标。
Output
输出仅一个整数,表示所求答案。
Sample Input
5
0 0
1 1
1 -1
-1 -1
-1 1
Sample Output
8
Data Constraint
对于50%的数据,n<=300。
对于100%的数据,n<=3000,坐标的绝对值不超过10^4,保证没有重合的点。
华丽的分割线
这个题就是求$n$个点之间能构成的三角形数
50分解法
暴力的解法就是$O(n^3)$的复杂度判三点共线,判定的方法就是看斜率是否相等,这里可以使用$x_1y_2=x_2y_1$来判断(自己去证),这样子可以搞定斜率为不存在(连线垂直于$x$轴)的情况。
100分做法
考虑到这里的$n$是$\leq3000$的,所以直接去暴力判重会爆掉,所以说我们要对其进行优化,正解给出了一个玄学的思路:
通过排序来完成判重
是不是很意外??
没错就是这种古老的被我们遗忘的做法
具体做法:
每次枚举一个点$i$,枚举编号大于等于$i$的顶点,计算出斜率$k$,显然,如果三点共线的话,斜率是相同的,如果相同的有$p$个,那么根据排列组合就应该在总数中减去$Cp_3$个,注意判重的精度要高一些,不然会炸。原来的总数是多少呢,显然是$Cn_3$。
AC Code
841ms,364KB
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#define ll long long
#define maxn 3005
using namespace std;
ll n,a[maxn],b[maxn];
double k[maxn];
void init(){
	scanf("%lld",&n);
	for(ll i=1;i<=n;i++)
		scanf("%lld %lld",a+i,b+i);
	return;
}
ll cmp(double a,double b){return a-b<0.00000001;}
void solve(){
	ll ans=n*(n-1)*(n-2)/6;
	for(ll i=1;i<=n-2;i++){
		for(ll j=1;j<=n;j++) k[i]=99999999999.9999;
		for(ll j=i+1;j<=n;j++)
			if(a[i]==a[j]) k[j]=999999999999.9999;
			else k[j]=(double)(b[i]-b[j])/(double)(a[i]-a[j]);
		sort(k+i+1,k+n+1,cmp);
		ll cnt=1,lst=i;
		for(ll kk=i+1;kk<=n;kk++){
			if(abs(k[kk]-k[lst])<0.000000001) cnt++;
			else{
				lst=kk;
				ans-=cnt*(cnt-1)/2;
				cnt=1;
			}
		}
		ans-=cnt*(cnt-1)/2;
	}
	printf("%lld\n",ans);
}
int main(){
	freopen("triangle.in","r",stdin);
	freopen("triangle.out","w",stdout);
	init();
	solve();
	return 0;
}
[solution] JZOJ3493 三角形的更多相关文章
- @topcoder - 2017TCOAlgorithmRound2A - D1L2@ DistanceZeroAndOne
		目录 @description@ @solution@ @accepted code@ @details@ @description@ 一个 n 个点的无向简单的连通图,编号从 0 到 n-1. 现给 ... 
- [LeetCode] Triangle 三角形
		Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ... 
- 【bzoj3505】 Cqoi2014—数三角形
		http://www.lydsy.com/JudgeOnline/problem.php?id=3505 (题目链接) 题意 给定一个n*m的网格,请计算三点都在格点上的三角形共有多少个. Solut ... 
- css 实现三角形 实现过程
		1.纯色的全等的三角形实现 下面的就是实际实现 没有宽高 只有边框 都是透明 根据箭头的方向 给边框方法加颜色 比如需要像右箭头 只需要给border-right-color:颜色值; 即可 c ... 
- UVa OJ 194 - Triangle (三角形)
		Time limit: 30.000 seconds限时30.000秒 Problem问题 A triangle is a basic shape of planar geometry. It con ... 
- lintcode:数字三角形
		题目: 数字三角形 给定一个数字三角形,找到从顶部到底部的最小路径和.每一步可以移动到下面一行的相邻数字上. 样例 比如,给出下列数字三角形: [ [2], [3,4], [6 ... 
- LeetCode Triangle 三角形(最短路)
		题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路. [], [,4], [6,,7], [4,,8,3] 注意: ... 
- [LeetCode 120] - 三角形(Triangle)
		问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最 ... 
- 三角形(Triangle)
		三角形(Triangle) 问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8 ... 
随机推荐
- 4-安装mariadb
			①yum install mariadb-server mariadb systemctl start mariadb #启动MariaDB systemctl stop mariadb #停止Mar ... 
- 性能测试Jmeter扩展学习-添加自定义函数
			我们在使用jmeter的时候有时候会碰到jmeter现有插件或功能也无法支持的场景,比如前端加密,此时我们就需要自己手动编写函数并导入了,下面就是手动修改并导入的过程. 首先我们需要下载jmeter源 ... 
- Twisted网络库编程实例
			于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里.如果英文很烂,可以看中文,这里.总的来说我了解到的主要包括以下三个东东:Factory.protocol和 ... 
- Java 学习  UUID 与 时间格式化、时间操作
			UUID : UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的,是让分 ... 
- 《面向对象程序设计(java)》第七周学习总结
			1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ... 
- Python——查看安装位置和安装的库
			查看Python 安装位置和安装的库 步骤一: 1. Start 一个command prompt 2. 找到电脑中已经安装的Python 位置: where python 1 打开路径, cd ... 
- js对象拷贝遇到的坑
			问题:通过拷贝赋值后,所有的对象的name居然都是C test(){ let person = [{'name':'danny'}] let names = ['A','B','C'] let tem ... 
- lvs+nginx负载均衡
			1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载 ... 
- PHPStorm 2018 的安装 汉化 与使用
			下载地址 和安装方法 链接:https://pan.baidu.com/s/1FT8aZoQajw044qlNXkRPfg 提取码:z4sx 配置与使用方法 https://blog.csdn.net ... 
- Windows驱动开发调试工具
			[开发工具] VS2012 [调试工具] Windbg:和VM配合实现双机联合调试,完成双机调试功能,可以结合<软件调试>这本书对Windbg有较为深入的认识. DebugView: 可以 ... 
