codeforces B. Pasha and Tea二分
2015-07-01 22:43
120 查看
http://codeforces.com/contest/557/problem/B
错了好多次。。
错了好多次。。
#include<map> #include<vector> #include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<stack> #include<queue> #include<set> #define inf 0x3f3f3f3f #define mem(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; typedef pair<int,int> pii; inline ll in() { ll res=0;char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res; } int a[200010]; int n,w; int mx,mn; bool judge(double d) { if(d>mn)return 0; //如果当前值比最小值还大,说明杯子不够用,要保证杯子必须全部用上 if(d*n+d*2*n>w)return 0; //大于总容量也不行 int cnt=0; for(int i=0;i<n*2;i++) // { if(a[i]>=d*2)cnt++; //统计大于2*d的杯子个数 } if(cnt>=n )return 1; //如果大于n则说明男孩被子够用,多出来的可以给女孩用,女孩杯子一定够用因为d<=杯子最小值 return 0; } int main() { n=in(),w=in(); mx=-inf,mn=inf; for(int i=0;i<n*2;i++) { a[i]=in(); mx=max(mx,a[i]); mn=min(mn,a[i]); } double l=0,r=mx; for(int i=0;i<100;i++) //不断二分女孩杯子的容量大小 { double mid=(l+r)/2; if(judge(mid)) l=mid; else r=mid; } double ans = l*n+l*2*n; printf("%10lf\n",ans); return 0; }
相关文章推荐
- C++ 的社会繁衍
- MapReduce在运行时接受命令行参数
- 黑马-OC语法-多态
- 手斧Linux – 从LFS到Funtoo (109)
- 手斧Linux – 从LFS到Funtoo (108)
- 手游服务器开发技术详解
- JavaScript表达式
- Ubuntu右键添加:open in terminal
- 入门金融学(1)
- DOS特殊字符转义方法
- Java Servlet 技术简介
- 手斧Linux – 从LFS到Funtoo (107)
- 编译安装httpd-2.4
- Spring IOC-BeanFactory的继承体系结构
- devexpress表格控件gridcontrol特殊应用(一)——实现禁用特定行(附源代码)
- hdoj 1035 Robot Motion
- Android常用框架收集
- 国创的几句感触
- C语言结构体
- 手斧Linux – 从LFS到Funtoo (106)