博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4033 Fruit Ninja 几何 二分搜索
阅读量:7253 次
发布时间:2019-06-29

本文共 1946 字,大约阅读时间需要 6 分钟。

  题中给定某一点到N个点的距离,问这些点能否组成正多边形?

  思路:选定两条边,通过二分法枚举某一条边的边长,算出该边长下对应的中心角,然后再依据此边计算出其余三角形对应的中心角,最后看总的角度是否为360度。

  代码如下:

  

#include 
#include
#include
using namespace std; double e[200]; const double PI = 4 * atan( double( 1 ) ); int N; double istri( double a, double b, double c ) {
if( c > a + b ) return 5; else if( c < fabs( a - b ) ) return -5; else return acos( ( a * a + b * b - c * c ) / ( 2 * a * b ) ); } double Acos( double a, double b, double c ) {
return istri( a, b, c ); } double bs( double mid ) {
double ans = 0; for( int i = 2; i <= N; ++i ) {
double t = Acos( e[i], e[i-1], mid ); if( fabs( t ) == 5 ) // 如果mid的这个取值使得某些相邻的两条边不 return t; // 能够形成三角形,则及时退出 else ans += Acos( e[i], e[i-1], mid ); } return ans; // 最后返回总的角度大小 } double bsearch( double ss, double ee ) {
double l = ss, r = ee, mid, sum_angle; while( r - l >= 1e-9 ) { mid = ( l + r ) / 2.0; double t = bs( mid ); // 计算出一部分的角度总和 if( fabs( t ) == 5 ) {
if( t > 0 ) r = mid; else l = mid; } else {
sum_angle = t + Acos( e[1] , e[N], mid ); if( sum_angle - 2 * PI > 1e-9 ) r = mid; else if( sum_angle - 2 * PI < -1e-9 ) l = mid; else return mid; } } return 0; } int main( ) {
int T; scanf( "%d", &T ); for( int ca = 1; ca <= T; ++ca ) {
scanf( "%d", &N ); for( int i = 1; i <= N; ++i ) {
scanf( "%lf", &e[i] ); } // 接下来选择第N条边以及第1条边来二分答案 // 根据三角形中有 C < A+B && C > A-B; double ans = bsearch( fabs( e[N] - e[1] ), e[1] + e[N] ); printf( "Case %d: ", ca ); if( ans == 0 ) puts( "impossible" ); else printf( "%.3lf\n", ans ); } return 0; }

转载于:https://www.cnblogs.com/Lyush/archive/2011/11/01/2231424.html

你可能感兴趣的文章
css 梯形标签页
查看>>
理解数据点,自变量和因变量(参数和值)ChartControl
查看>>
机器学习数学基础总结
查看>>
[HP-UX]清空FIN_WAIT_2的连接
查看>>
大白话Vue源码系列(02):编译器初探
查看>>
[Sdoi2016]平凡的骰子
查看>>
mysql定义游标
查看>>
两个有序数组合并算法
查看>>
面向对象设计原则之五:迪米特法则
查看>>
GitHub for Windows简单使用
查看>>
c#操作XML
查看>>
作为一个测试leader平时应该注意哪些方面
查看>>
【DOM编程艺术】Ajax(Hijax)
查看>>
微信公众平台开发(十) 消息回复总结——用其xml模板
查看>>
iOS.CM5.CM4.CM2
查看>>
菜鸟学T-SQL---------SQL2005读书笔记1
查看>>
Python--函数(全局变量和局部变量)
查看>>
PLSQL Developer 不能连接 oracle 11g 64位 的解决办法
查看>>
byobu相关操作
查看>>
父页面操作嵌套iframe子页面的HTML标签元素
查看>>