HDU 4033 Regular Polygon(二分+高精度)
比赛时没做出来,最后10 钟时倒是想枚举每个角度,精度估计上可能会出问题;
后来听“理宝”说可以暴力枚举边的长度,精确到0.001,数据恰好10^7,T_T~~
vongang说可以用二分做,也就是官方解题报告的解法:
这题用二分的关键是:
首先Regular Polygon是正多边形,:
想到边长和所对的角成正比,没想到啊,Orz,各路大神
贴个山寨的代码吧:
#include<stdio.h>#include<math.h> #define N 110const 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
HDU 4033 Regular Polygon(二分+高精度)相关推荐
- 求正多边形的面积JAVA_第六章第三十六题(几何:正多边形的面积)(Geometry: area of a regular polygon)...
*6.36(几何:正多边形的面积)正多边形是一个n条边的多边形,它的每条边的长度都相等,而且所有角的角度也相等(即多边形既是等边又等角的).计算正多边形面积的公式是: 使用下面的方法头编写方法,返回正 ...
- hdu6055—Regular polygon(正方形的判定)
题目链接:传送门 Regular polygon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java ...
- hdu 4033 二分几何
参考:http://blog.csdn.net/libin56842/article/details/26618129 题意:给一个正多边形内点到其他顶点的距离(逆时针给出),求正多边形的边长 二分多 ...
- HDU 3646 DP + 二分
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...
- hdu 5199 map或二分或哈希
题目描述:给出n棵树的高度,每棵树上都站着一只鸟,枪手Jack站在最左边那棵树的左边对鸟进行射击,当Jack在高度为H的地方向右发射一颗子弹的时候,高度为H的树上的鸟儿就会掉落(注:其他树上的鸟儿不会 ...
- HDU 5972 Regular Number
Regular Number http://acm.hdu.edu.cn/showproblem.php?pid=5972 题意: 给定一个字符串,求多少子串满足,子串的第i位,只能是给定的数(小于等 ...
- HDU 2289 Cup(二分+圆台体积)
Problem Description The WHU ACM Team has a big cup, with which every member drinks water. Now, we kn ...
- HDU 5972 Regular Number(ShiftAnd+读入优化)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...
- HDU 1047 Integer Inquiry( 高精度加法水 )
链接:传送门 思路:高精度水题 /*************************************************************************> File ...
最新文章
- Laravel和Thinkphp有什么区别,哪个框架好用
- Ecology Letters:重金属的污染可导致铁载体生产菌的增加
- 《预训练周刊》第19期:歧义短语的类量子语境性研究、自然语言处理中prompt方法的系统综述...
- linux大容量硬盘 克隆到小硬盘_Linux添加新硬盘的挂载方法
- 9个让2D游戏创作更轻松的工具
- java删除字符串最后一位
- C#开发模式——单例模式
- 方便的Chrome取色插件ColorPick Eyedropper [设计, FE必备]
- C ~ 指针函数与函数指针的区别
- clobzh字符串缓冲区太小的解决方法_用4K屏玩LOL英雄联盟游戏指针太小解决方法已找到...
- 读EasyPR开发详解实践感想1
- django urls路由匹配分发
- 搭建Windows下基于Eclipse 的 PHP 开发环境
- 包含min函数的栈 【微软面试100题 第二题】
- java hql left join_求教hql的left join结合条件的写法
- 腾讯会议共享屏幕时,设置演讲者模式仅自己可见
- 如何下载免费版的PDF编辑器
- linux玩安卓游戏下载,在Deepin 20.2系统下可用Xdroid on Linux来玩王者荣耀游戏
- nodejs 定时任务
- C++超市管理系统(MySQL)