首页 > 代码库 > Probability Through Experiments
Probability Through Experiments
题目链接
- 题意:
给n个在圆上的点,和圆的半径,每个点给出和x轴正方向的夹角,求能构成的锐角三角形的个数。 - 分析:
锐角不好求,对于钝角和直角是比较好求的:直角就是有一个边过圆心;钝角就是三个边均在圆心的一侧 - 重点:
这个题目很重要的一点就是精度问题,题目的输入是三位小数,但是直接用double做没办法AC。。。改用乘以1000后取整也无法AC,需要注意精度处理
const int MAXN = 41000; int ipt[MAXN]; int main() { LL n, r; int kase = 1; while (cin >> n >> r && (n && r)) { REP(i, n) { int a, b; scanf("%d.%d", &a, &b); ipt[i] = a * 1000 + b; } sort(ipt, ipt + n); FF(i, n, n + n) ipt[i] = ipt[i - n] + 360000; LL ans = 0, idx, x; LL all = n * (n - 1) * (n - 2) / 6; REP(i, n) { idx = lower_bound(ipt + i, ipt + n + i, ipt[i] + 180000) - ipt; x = n + i - idx; if (x >= 2) ans += (x - 1) * x / 2; } cout << "Case " << kase++ << ": " << all - ans << endl; } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。