codeforces #308 D.Vanya and Triangles(枚举+斜率分块)
来源:互联网 发布:手机cad画图软件 编辑:程序博客网 时间:2024/04/30 03:55
题目链接:
题目
题目大意:
给出2000个点,问能组成多少个面积不为1的三角形
题目分析:
只要三个点不共线,就能组成一个三角形,那么n个点在不考虑面积为0的情况的时候能得到C(n,3)个三角形,
那么考虑三点共线的情况,首先枚举一个点,那么对于一个任意两个与它构成的直线斜率相同的点会导致三点共线,那么我们看当前枚举的点每个斜率的点的个数,对于每个斜率,会贡献出C(m,2)种情况导致三点共线,那么利用这个n^2的复杂度可以解决这个问题
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#define eps 1e-8#define MAX 2007using namespace std;typedef long long LL;LL n;int x[MAX],y[MAX];vector<double> gradient;int main ( ){ while ( ~scanf ( "%lld" , &n ) ) { for ( int i = 0 ; i < n ; i++ ) scanf ( "%d%d" , &x[i] , &y[i] ); LL ans = n*(n-1LL)*(n-2LL)/6LL; for ( int i = 0 ; i < n ; i++ ) { gradient.clear(); for ( int j = i+1 ; j < n ; j++ ) { double k = (y[j]-y[i])*1.0/(x[j]-x[i]); if ( x[j] == x[i] ) gradient.push_back(10000); else gradient.push_back ( k ); } sort ( gradient.begin(), gradient.end() ); int len = gradient.size(); LL cnt = 1; for ( int j = 1 ; j < len ; j++ ) { if ( fabs(gradient[j]-gradient[j-1])<eps ) cnt++; else { ans -= cnt*(cnt-1LL)/2LL; cnt = 1; } } if ( cnt > 1 ) ans -= cnt*(cnt-1LL)/2LL; } printf ( "%lld\n" , ans ); }}
0 0
- codeforces #308 D.Vanya and Triangles(枚举+斜率分块)
- CodeForces 552D — Vanya and Triangles 暴力枚举
- Codeforces 552D Vanya and Triangles【暴力枚举+思维】
- D. Vanya and Triangles(Codeforces Round #308 (Div. 2))
- Codeforces Round #308 (Div. 2) D. Vanya and Triangles
- Codeforces Round #308 (Div. 2) D Vanya and Triangles
- Codeforces 552D Vanya and Triangles
- CodeForces 552D Vanya and Triangles
- 【25.33%】【codeforces 552D】Vanya and Triangles
- #308 (div.2) D. Vanya and Triangles
- cf #308 D. Vanya and Triangles (几何)
- Codeforce 552D Vanya and Triangles(暴力枚举)
- Codeforces 552D. Vanya and Triangles【向量判三点共线】
- cf#308-D - Vanya and Triangles-求平面点集中三角形个数-枚举-n^2logn
- Codeforces Round #308 (Div. 2) D. Vanya and Triangles (判断三角形数量)
- CodeForces 552D-Vanya and Triangles【计算整数三点能否组成三角形】
- CodeForces - 552D Vanya and Triangles (数学几何求三角形个数)水
- codeforces#308-E - Vanya and Brackets-枚举+表达式计算
- 利用mybatis-generator自动生成代码
- Mysql 多表联合查询效率分析及优化
- iOS 检测内存泄露
- 国家超级计算天津中心免费测试活动(长期有效)
- Go语言学习示例
- codeforces #308 D.Vanya and Triangles(枚举+斜率分块)
- 获取本地照片和拍照上传并裁剪的实现
- 变量
- LeetCode 之 Merge Intervals — C++ 实现
- 子数组之和
- eclipse中文字体大小修改,让中英文字体协调
- PostgreSql初探(2)-创建数据库
- 1小时 1分钟之前 java 处理
- dyld:Expected in: /System/Library/Frameworks/CFNetwork.framework/CFNetwork