HDU 4033 Regular Polygon(二分+高精度)

比赛时没做出来,最后10 钟时倒是想枚举每个角度,精度估计上可能会出问题;

后来听“理宝”说可以暴力枚举边的长度,精确到0.001,数据恰好10^7,T_T~~

vongang说可以用二分做,也就是官方解题报告的解法:

这题用二分的关键是:

        首先Regular Polygon是正多边形,:

        想到边长和所对的角成正比,没想到啊,Orz,各路大神

贴个山寨的代码吧:

#include<stdio.h>
#include<math.h>

#define N 110
const double inf =10000;
const double pi=acos(-1.0);
const double eps =1e-6;
double len[N];

bool dd(double x,double y) {return fabs(x-y)<eps;}
bool xy(double x,double y) {return x < y - eps;}
bool yx(double x,double y) {return x > y + eps;}
bool xyd(double x,double y) {return x < y + eps;}
bool yxd(double x,double y) {return x > y - eps;}

double ang_cal(double a,double b,double c)
{
return acos((a*a+b*b-c*c)/(2*a*b));
}
int solve(int n,double x)
{
double ang=0;
for(int i=0;i<n;i++)
{
if(yxd(x,len[i]+len[i+1])) return 1;
if(xyd(x,fabs(len[i]-len[i+1]))) return -1;
ang+=ang_cal(len[i],len[i+1],x);
}
if(dd(ang,2*pi)) return 0;
if(xy(ang,2*pi)) return -1;
if(yx(ang,2*pi)) return 1;
}
bool check(double ang,double x)
{
double a1=ang_cal(len[1],x,len[0]);
double a2=ang_cal(len[1],x,len[2]);
return dd(ang,a1+a2);
}

int main()
{
int cs=1,ncs,n;
scanf("%d",&ncs);
while(ncs--)
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%lf",len+i);
len[n]=len[0];

double bg=0,end=inf,mid;
int flag=0,cnt=0;
while( xyd(bg,end) )
{
if(dd(bg,end)) cnt++;
if(cnt==2) break;

mid=(bg+end)/2;
int ans=solve(n,mid);
if(ans==0)
{
flag=1;break;
}
if(ans > 0) end=mid;
else bg=mid;
}
if(flag)
{
double ang=(n-2)*pi/n;
if(!check(ang,mid))
printf("Case %d: impossible\n",cs++);

else
printf("Case %d: %.3f\n",cs++,mid);
}
else printf("Case %d: impossible\n",cs++);
}
return 0;
}



转载于:https://www.cnblogs.com/skyming/archive/2012/04/05/2433683.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] html5点击返回键怎样不让它返回上一页?

[html] html5点击返回键怎样不让它返回上一页&#xff1f; $(function() {if (window.history && window.history.pushState) {$(window).on(popstate, function () {window.history.pushState(forward, null, #);window.history.forward(1);});}window.history.pushSt…

python怎么输出结果_Python中print()常用输出方法

print函数用法 1.输出字符串 print Hello World print "Hello World" print (Hello World) print ("Hello World") [注] 对于Python 3.0及以上版本&#xff0c;print是函数&#xff0c;因此需要编写print ()而不是print。 输出结果&#xff1a; Hello Worl…

Redis的备份与恢复

备份 dump.rdb&#xff1a;RDB方式的备份文件 appendonly.aof&#xff1a;AOF方式的备份文件rdb 备份处理 # 编辑redis.conf文件&#xff0c;找到如下参数&#xff0c;默认开启。 save 900 1 save 300 10 save 60 10000aop备份处理 # 编辑redis.conf文件&#xff0c;找到如下参…

javascript网页自动填表_JavaScript脚本实现网页批量自动勾选及内容填写

我们知道&#xff0c;大部分学校每个学期都有教学评估。对于我这种习惯性好评&#xff0c;老师又真心不错的人&#xff0c;十多个老师的评价都是good&#xff0c;这是赤裸裸的重复劳动啊。于是我动了歪念头...嘿嘿嘿1.登录教学评估的网页&#xff0c;选择一位老师&#xff1a;如…

java 修改 jar 包文件内容的一个实例

开发这个小工具的初衷是为了修改工具 jar 包中的配置文件 本来打算将这个功能集成到 工具 jar 包自身 但是这里貌似有点儿问题&#xff0c;因为该 jar 包文件当前正在被 java 虚拟机使用&#xff0c;所以无法对其进行修改操作~ 这里我有点儿疑惑&#xff0c;难道不是将 jar 包整…

python画图灰白_python 站点资料插值画图及白化

import cmaps import maskout import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import Rbf from mpl_toolkits.basemap import Basemap plt.rcParams[font.sans-serif][SimHei] #用来正常显示中文 plt.rcParams[axes.unicode_…

[html] 在普通网页中如何调用html5+的plus对象?

[html] 在普通网页中如何调用html5的plus对象&#xff1f; document.addEventListener( "plusready", onPlusReady, false ); onPlusReady 函数中就可以引用plus对象个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定…

算法之归并排序

package com.ebiz.sort;import java.util.Arrays;/*** author YHj* create 2019-09-03 22:21* /*** 归并排序&#xff08;递归&#xff09;** ①. 将序列每相邻两个数字进行归并操作&#xff0c;形成 floor(n/2)个序列* ②. 执行①直到每组有一个元素 * ③. 各组之间进行比较*…

eureka需要替换吗_nacos无缝替换eureka

首先安装好nacos之后直接引入客户端依赖和配置文件&#xff0c;同时把eureka的内容去掉从nacos官网 https://nacos.io/zh-cn/index.html 下载安装包下载好之后解压&#xff0c;打开配置文件 conf/application.properties 配置一下mysql和地址&#xff0c;其他的的按需配置serve…

程旭元系统漫画第三期:加班 !

对于苦逼的程旭元来说 加班已经变成了生活中不可缺少的部分 他的原则是不能像胖子那样贪吃 不能像销售员那样狡诈 一定要尽忠职守 精忠报国 &#xff01;老板说什么他就做什么&#xff01; 对于一个从来只说加班不加工资的boss来说 唯命是从就是存活在公司的最好方式~ 但是有…

python 的库如何开发_一篇文章入门Python生态系统

译者按&#xff1a;原文写于2011年末&#xff0c;虽然文中关于Python 3的一些说法可以说已经不成立了&#xff0c;但是作为一篇面向从其他语言转型到Python的程序员来说&#xff0c;本文对Python的生态系统还是做了较为全面的介绍。文中提到了一些第三方库&#xff0c;但是Pyth…

[html] 你知道什么是html5plus吗?

[html] 你知道什么是html5plus吗&#xff1f; 用js的方式来调用移动app(安卓和ios)的原生能力&#xff0c;例如拍照&#xff0c;摄像个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一…

机器学习线性回归案例讲解_09机器学习实战之简单线性回归

基本概念1. 介绍&#xff1a;回归(regression) Y变量为连续数值型(continuous numerical variable)如&#xff1a;房价&#xff0c;人数&#xff0c;降雨量分类(Classification): Y变量为类别型(categorical variable)如&#xff1a;颜色类别&#xff0c;电脑品牌&#xff0c;有…

silverlight Image Source URI : 一个反斜杠引发的血案

silverlight Image Source URI : 一个反斜杠引发的血案 Silverlight2 现在支持的Image格式有jpg和png&#xff0c;部分png编码也不支持&#xff0c;同时有些png在xaml的design预览中不可见&#xff0c;但运行时可见。请看XAML markup中两行代码的异同&#xff1a; <StackPan…

python编码和解码_Python中的编码与解码(转)

Python中的字符编码与解码困扰了我很久了&#xff0c;一直没有认真整理过&#xff0c;这次下静下心来整理了一下我对方面知识的理解。 文章中对有些知识没有做深入的探讨&#xff0c;一是我自己也没有去深入的了解&#xff0c;例如各种编码方案的实现方式等&#xff1b;二是我觉…

[html] 怎样使用iframe刷新父级页面

[html] 怎样使用iframe刷新父级页面 //在父页面中window.addEventListener("message",function(e){if(e.data.reload){winodw.location.reload()}}, false);//在子页面中window.parent.postMessage({reload:true})个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前…

Nginx编译安装和平滑升级

一、Nginx的编译安装 1、安装依赖包gcc&#xff0c;gcc-c&#xff0c;pcre&#xff0c;openssl-devel 命令&#xff1a;yum -y install gcc gcc-c pcre-devel openssl-devel 2、下载Nginx源码包 Nginx下载地址&#xff1a;http://nginx.org/download/nginx-1.12.2.tar.gz …

python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞

遇到的问题使用命令subprocess.check_call(cmd, shellTrue, stdoutsubprocess.PIPE, stderrsubprocess.STDOUT)在ubuntu系统中python中使用subprocess.check_call调用shell命令。发现subprocess.check_call的阻塞无效&#xff0c;导致下面的命令缺失信息。但是同样的代码在cent…

android ListView详解

在android开发中ListView是比较常用的组件&#xff0c;它以列表的形式展示具体内容&#xff0c;并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理&#xff0c;并写了个小例子&#xff0c;如下图。 列表的显示需要三个元素&#xff1a;1&#xff0e;ListVeiw …

[html] iframe在更改了src之后,不出现后退或者前进按钮怎么解决?

[html] iframe在更改了src之后&#xff0c;不出现后退或者前进按钮怎么解决&#xff1f; 更改src时可以先删除旧的iframe后&#xff0c;新建一个iframe设置好src添加进去个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。…