博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2011成都网赛 / 1003 - Regular Polygon
阅读量:5738 次
发布时间:2019-06-18

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

利用余弦定理,构造函数 b=sigma(acos(a[i]^2+a[i+1]^2-e^2)/(2a[i]a[i+1]))。e为边长。当e为解时,b=2*pi(内角和)。重点是,b(e)是单调上升的。所以可以二分。(事实上我觉得这种题目必然要二分,重点就是找一个单调函数)。

写的时候,犯了个很傻逼的错误,还以为是精度问题,就一直改精度........(我发现其实做eps的精度,就把eps对应成整数里的1来理解就是了,二分、比较大小什么的都是跟整数同理的,这样好想很多)。 改到我觉得精度不可能有问题的时候...........突然发现,原来我开始的上下界写错了。竟然把 +-eps写到循环里了.......还有,这题是maxe=min(a[i]+a[i+1]),mine=max(fabs(a[i]-a[i+1])) 的.......这里写的时候也傻逼了。

代码:

#include
#include
#include
#include
#include
using namespace std;#define MAXN 110#define INF 1<<30#define pi acos(-1.0)#define eps 1e-8 //eps !!double a[MAXN]; //边长int n;double f(double x1, double x2, double e) //返回角度{ return acos((x1*x1+x2*x2-e*e)/(2*x1*x2));}double func(double e) // f(边长)-> 2pi{ double ret=0; for(int i=0; i
=y+eps) return 1; //x>=y+eps else return -1;}double solve(){ double maxe=INF, mine=0; //① 很容易错,因为max值是取min操作的........ for(int i=0; i
eps || !cmp(r, l)) //相当于eps精度下的 l<=r { double mid=(l+r)/2; double t = func(mid);//printf("t=%lf, 2*pi=%lf, sub=%.10lf\n", t, 2*pi, fabs(t-2*pi)); int flag = cmp(t, 2*pi); if(!flag) return mid; else if(flag>0) r=mid-eps; else if(flag<0) l=mid+eps;//printf("(%.10lf, %.10lf), sub=%.10lf, eps=%.10lf\n", l, r, r-l, eps); if(yes) break; if(!cmp(l, r)) yes=1; } return 0;}int main(){ int t; scanf("%d", &t); for(int T=0; T

转载于:https://www.cnblogs.com/tclh123/archive/2011/09/12/2587066.html

你可能感兴趣的文章
你是谁不重要,关键是你跟谁!
查看>>
CSS中规则@media的用法
查看>>
pychecker:分析你的python代码
查看>>
css 默认不显示 之后显示
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>