UVA 12535 Probability Through Experiments 解题报告
2013-08-05 20:51
393 查看
比赛
题目
题意:
一个圆的圆周上有一些点,求能组成的锐角三角形的个数。
题解:
一个在圆上的三角形,按顺时针方向设点为A、B、C。如果是钝角三角形,则圆周上A到C的角小于180,如果是直角,则圆周上A到C的角等于180,B的位置随意,在AC间就行。所以可以根据此计算钝角三角形和直角三角形的个数:枚举C点,在[C,C+180]范围内选两个点做AB。注意C大于180度时的情况,就在[C,360]和[0,C-180]中选。
注意EPS的问题
题目
题意:
一个圆的圆周上有一些点,求能组成的锐角三角形的个数。
题解:
一个在圆上的三角形,按顺时针方向设点为A、B、C。如果是钝角三角形,则圆周上A到C的角小于180,如果是直角,则圆周上A到C的角等于180,B的位置随意,在AC间就行。所以可以根据此计算钝角三角形和直角三角形的个数:枚举C点,在[C,C+180]范围内选两个点做AB。注意C大于180度时的情况,就在[C,360]和[0,C-180]中选。
注意EPS的问题
//Time:175ms //Memory:0KB //Length:1033B #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define MAXN 20010 #define MAXM 100010 #define EPS 1e-6 double si[MAXN]; int bs(int r,double key) { int l=0,mid; --r; while(l<r) { mid=(l+r+1)/2; if(si[mid]>key+EPS) r=mid-1; else l=mid; } if(si[l]>key+EPS) return -1; return l; } int main() { //freopen("/home/moor/Code/input","r",stdin); int n,m,cnt=0; long long ans=0; while(scanf("%d%d",&n,&m)==2) { ans=0; if(n==0&&m==0) break; printf("Case %d: ",++cnt); for(int i=0;i<n;++i) scanf("%lf",&si[i]); sort(si,si+n); for(int i=0;i<n;++i) { long long tmp; if(si[i]<180-EPS) tmp=bs(n,180+si[i]+EPS)-i; else tmp=n-i+bs(n,si[i]-180+EPS); ans+=tmp*(tmp-1)/2; } cout<<((long long)n*(n-1)/2*(n-2)/3-ans)<<'\n'; } return 0; }
相关文章推荐
- uva_12535 - Probability Through Experiments
- UVA 123 解题报告
- UVA 12124 - Assemble 解题报告
- Uva 227-Puzzle 解题报告
- UVa 387 - A Puzzling Problem 解题报告(暴力)
- UVA815 洪水(重庆一中高2018级信息学竞赛测验3) 解题报告
- UVAlive 6151 Beehives 解题报告
- UVa 1594 解题报告
- UVa第五章STL应用 习题((解题报告))具体!
- 【解题报告】uva116_Unidirectional TSP(单向TSP, dp)
- UVALive 6047 Perfect Matching 解题报告
- UVa 10010 - Where's Waldorf? 解题报告
- hdu 1142 A Walk Through the Forest 最短路+记忆化搜索 解题报告
- 解题报告 之 UVA11054 Wine trading in Gergovia
- uva 489.Hangman Judge 解题报告
- 解题报告 之 UVA11093 Just Finish it up
- 解题报告(一):uva 10313 - Pay the Price (dp)
- 训练指南UVALive5088解题报告
- UVa 1344 Tian Ji -- The Horse Racing 解题报告(贪心)
- Uva 11375 Matches 解题报告(递推+高精度)