JZOJ 5606. 【NOI2018模拟3.27】Yja
Description
在平面上找 n 个点, 要求这 n 个点离原点的距离分别为 r 1 ,r 2 ,…,r n . 最大化这 n 个点构成的
凸包面积, 凸包上的点的顺序任意.不要求点全部在凸包上
Input
第一行一个整数 n.
接下来一行 n 个整数依次表示 r i
Output
输出一个实数表示答案, 要求绝对误差或相对误差 ≤ 10^−6 .
Sample Input
4
5
8
58
85
Sample Output
2970
Data Constraint
对于前 20% 的数据, n ≤ 3;
对于前 40% 的数据, n ≤ 4;
对于另 20% 的数据, r 1 = r 2 = … = r n ;
对于 100% 的数据, 1 ≤ n ≤ 8, 1 ≤ r i ≤ 1000.
Solution
考虑先暴力枚举 选几个点 和 点的相对顺序 。
之后我们要使 Ans=R1R2sin(θ1)+R2R3sin(θ2)+⋅⋅⋅+RnR1sin(θn)Ans=R_1R_2sin(θ_1)+R_2R_3sin(θ_2)+···+R_nR_1sin(θ_n) 最大。
其中 θθ 满足条件:θ1+θ2+⋅⋅⋅+θn=2πθ_1+θ_2+···+θ_n=2π 。
运用 拉格朗日乘数法,我们可以得出拉格朗日乘子
λ=R1R2cos(θ1)=R2R3cos(θ2)=⋅⋅⋅=RnR1cos(θn)λ=R_1R_2cos(θ_1)=R_2R_3cos(θ_2)=···=R_nR_1cos(θ_n)
因为 θi∈(0,π)θ_i∈(0,π) (超过了必然不会更优),又 cos(θ)cos(θ) 在 [0,π][0,π] 上单调递减。
于是我们可以通过单调性二分出一个最小的 λλ 满足 θ1+θ2+⋅⋅⋅+θn=2πθ_1+θ_2+···+θ_n=2π 。
接着由 θi=arccos(λRiRi+1)θ_i=arccos(\frac{λ}{R_iR_{i+1}}) 就可以算出每个 θiθ_i 。
最后统计答案即可,时间复杂度 O(N!∗N∗logAns)O(N!*N*logAns) 。
附:拉格朗日乘数法的一般步骤如下(以此题为例):
设出目标函数 f(R1,⋅⋅⋅,Rn)=∑RiRi+1sin(θi)f(R_1,···,R_n)=\sum{R_iR_{i+1}sin(θ_i)}
设出条件函数 g(R1,⋅⋅⋅,Rn)=∑Ri−2π=0g(R_1,···,R_n)=\sum{R_i}-2π=0
再设出拉格朗日乘数函数 F(R1,⋅⋅⋅,Rn,λ)=f(R1,⋅⋅⋅,Rn)+λg(R1,⋅⋅⋅,Rn)F(R_1,···,R_n,λ)=f(R_1,···,R_n)+λg(R_1,···,R_n) 。
之后就可以求出关于每个元的偏导数(其它元看做常数),联立即可求出各个元:
F′θi=RiRi+1cos(θi)+λ=0,F′λ=∑Ri−2π=0F_{θ_i}'=R_iR_{i+1}cos(θ_i)+λ=0 ,F_λ'=\sum{R_i}-2π=0
使各个偏导数都等于 0 ,解出的解就是最值的解了。
Code
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cctype>
using namespace std;
const double Pi=acos(-1.0),eps=1e-7;
int n,a[10];
double t[10],ans;
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
inline double check(double x)
{double sum=t[n]=acos(x/a[1]/a[n]);for(int i=1;i<n;i++) sum+=t[i]=acos(x/a[i]/a[i+1]);return sum;
}
int main()
{n=read();for(int i=1;i<=n;i++) a[i]=read();sort(a+1,a+1+n);while(n>=3){do{double l=-1.0*a[1]*a[2],r=-l;while(l+eps<r){double mid=(l+r)/2.0;if(check(mid)>=2*Pi) l=mid+eps; else r=mid-eps;}if(fabs(check(l)-2*Pi)<=eps){double num=sin(t[n])*a[1]*a[n];for(int i=1;i<n;i++) num+=sin(t[i])*a[i]*a[i+1];if(num>ans) ans=num;}}while(next_permutation(a+1,a+1+n));n--;for(int i=1;i<=n;i++) a[i]=a[i+1];}printf("%.7lf",ans/2.0);return 0;
}
JZOJ 5606. 【NOI2018模拟3.27】Yja相关推荐
- JZOJ 5603. 【NOI2018模拟3.27】Xjz
Description 给定字符串 S 和 T. 串A和串B匹配的定义改为:存在一个字符的映射,使得A应用这个映射之后等于B,且这个映射必须为一个排列. A=121, B=313,当映射为{1-> ...
- 九星连珠用c语言编程,王者模拟战27号更新:九星连珠不再是梦想 贪婪天赋荣升A级...
原标题:王者模拟战27号更新:九星连珠不再是梦想 贪婪天赋荣升A级 个人观点:王者荣耀模拟战中要实现三星英雄九星连珠的梦想很难,原因是没有大量金币支持玩家抽卡升三星,而恰恰有天赋贪婪可以轻松实现这个梦 ...
- JZOJ 5623. 【NOI2018模拟4.2】program
Description Input Output Sample Input 10 5 8>6<2<>54< 4 7 1 10 4 4 2 9 8 10 Sample Ou ...
- JZOJ 5982. 【WC2019模拟12.27】路径排序
Description Input Output Sample Input 输入1: 5 3 1 1 4 4 2 1 5 4 3 1 3 1 4 2 4 3 2 输入2: 10 5 4 10 3 6 ...
- JZOJ 5931. 【NOIP2018模拟10.27】冒泡排序
Description 题目背景 冒泡排序的交换次数被定义为交换过程的执行次数. 题面描述 小 S 开始专注于研究⻓度为 n 的排列,他想知道,在你运气足够好的情况下(即每次冒泡排序的交换次数都是可能 ...
- JZOJ 5933. 【NOIP2018模拟10.27】百鸽笼
Description Input 从文件 pigeon.in 中读入数据. 输入第一行包含两个正整数 n, m ,分别表示初始鸽笼数与操作个数. 第二行包含 n 个正整数,第 i 个数表示从左往右第 ...
- JZOJ 5932. 【NOIP2018模拟10.27】情报中心
Description 题目背景 .飞纷火战来年近国 D 和国 C .飞乱子鸽来年近国 D 和国 C 题面描述 最近,C 国成功地渗透进入了 D 国的一个城市.这个城市可以抽象成一张有 n 个节点,节 ...
- JZOJ 5643. 【NOI2018模拟4.10】最小代价
Description 给定一张n个点m条边的无向图,点编号1到n,每个点x有两个权值ax和bx.给定k,选出图中一个大小为k的点集S,使得S中任意两个点之间存在仅经过这个点集中的点的路径.S也存在两 ...
- JZOJ 5640. 【NOI2018模拟4.9】劈配
Description Input Output 输出到文件 mentor.out 中. 按顺序输出每组数据的答案.对于每组数据,输出 2 行: • 第 1 行输出 n 个用空格隔开的正整数,其中第 ...
最新文章
- GitHub:TensorFlow、PyTorch最全资料集锦
- windows Server 2003 IIS启用父路径
- Spring框架版本命名规则
- hibernate mysql 性能_MyBatis和Hibernate相比,优势在哪里?
- pytorch flatten函数_1. PyTorch中的基本数据类型——张量
- C++求解汉字字符串的最长公共子序列 动态规划
- 3年flash游戏开发小结
- linux如何入侵电脑,Linux超大漏洞,按28次Backspace键即可入侵电脑
- html编写在线打字通,HTML5代码打字练习、HTML5案例 - 03
- 计算机中的cmd是什么意思,计算机中的cmd是什么意思,全称是什么
- 电脑快捷键大全 Alt
- Why WebRTC|前世今生
- linear-gradient 实现切角效果
- Java 实现回文数
- APP - 小米/红米电视开机广告屏蔽 hosts 列表分享,轻松解决开机广告
- atom可以做php开发吗,atomcode 一个相当牛B的PHP开发框架,可以到网上去搜索文档,就不帖在这儿了 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
- javascript_实现
- 奥特斯出席2018重庆市市长国际经济顾问团第十三届年会
- 12306火车车次票价查询api
- html书签解析,解析netscape样式书签html文件嵌套数组