LA6142 Probability Through Experiments 统计圆上的锐角三角形
来源:互联网 发布:unity3d开发安卓游戏 编辑:程序博客网 时间:2024/05/16 23:37
题目地址:LA6142
先说统计思路: 我们统计钝角和直角三角形,这样才不会重复计算,每次找到一个点后,统计这个逆时针走的这段半圆弧上的点的个数,任取两个就是钝角或者直角三角形,而且补重不漏。
找个数--二分,用upperbound 这样nlogn时间复杂度 暴力n*n*n肯定不行
注意 1 读入数据的时候,double *1000不行啊,浮点数误差+0.5 取floor 为这个wa了很久
2 180度这个点要单独考虑,
代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int p[20005];int main(){ long long n,r; double temp; int cas=0; while(cin>>n>>r) { if(!n) break; long long all=n*(n-1)*(n-2)/6; long long ans=0; for(int i=0;i<n;i++) { scanf("%lf",&temp); p[i]=floor(temp*1000+0.5); } sort(p,p+n); for(int i=0;i<n;i++) { if(p[i]<180000) { long long temp=upper_bound(p, p+n, p[i]+180000)-lower_bound(p,p+n, p[i])-1; ans+=temp*(temp-1)/2; //cout<<'i'<<i<<"temp"<<temp<<endl; } else if(p[i]==180000) { long long b=n-i-1; if(p[0]==0) b++; ans+=b*(b-1)/2; } else { long long a=n-i-1; long long b=upper_bound(p, p+n, p[i]-180000)-p+a; ans+=b*(b-1)/2; // cout<<'i'<<i<<"b"<<b<<endl; } } printf("Case %d: %lld\n",++cas,all-ans); }}
0 0
- LA6142 Probability Through Experiments 统计圆上的锐角三角形
- Probability Through Experiments
- Probability Through Experiments
- Probability Through Experiments
- UVA 12535 Probability Through Experiments 解题报告
- UVAL 6142 Probability Through Experiments 二分搜索 组合数
- Probability
- Probability
- Probability
- Probability
- Probability
- probability
- Probability
- Probability
- LA6142 Radiation 二分查找
- 1.2 Probability Theory 概率论(上)
- Knight Probability in Chessboard:棋盘上计算K步之后棋子仍在棋盘上的概率
- 最短路上的统计
- C语言格式输出函数printf()详解
- Android开发学习笔记4--安卓程序安装与启动过程剖析
- PHP 5.3.6及以前版本的PDO的bindParam,bindValue潜在的安全隐患
- Day12 - usermod 修改用户帐号
- 怎样清空输入缓冲区里的内容
- LA6142 Probability Through Experiments 统计圆上的锐角三角形
- Android开发学习笔记6--安卓程序调试方法
- linux环境禁用apache目录浏览功能
- 常用的Java库、框架和工具清单
- Intro OpenCL Tutorial
- 提升tomcat服务器性能的七条经验
- oc第三天字典
- 配置LAMP服务
- perl笔记