2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席(折半搜索+类二分枚举)
2017-06-03 22:07
330 查看
Problem E: qwb和李主席
Time Limit: 4 Sec Memory Limit: 128 MBSubmit: 424 Solved: 51
[Submit][Status][Web
Board]
Description
qwb和李主席打算平分一堆宝藏,他们想确保分配公平,可惜他们都太懒了,你能帮助他们嘛?
Input
输入包含多组测试数据,处理到文件结束。每组测试数据的第一行是一个正整数N(0 <= N <=36 )表示物品的总个数.。
接下来输入N个浮点数(最多精确到分),表示每个物品的价值V(0<V<=1e9)。
Output
对于每组测试数据,输出能够使qwb和李主席各自所得到的物品的总价值之差的最小值(精确到分),每组测试数据输出占一行。
Sample Input
3 0.01 0.1 1 2 1 1
Sample Output
0.89 0.00
HINT
分析: 直接枚举36的话有 2^36种情况,所以折半查找,枚举出所有选取的情况,那么可以分为两半 A,B 那么一个人的选取就有3种情况1.只在A中取
2.只在B中取
3.在A和B中分别取一种组合。
前两种很好解决,直接扫一遍就可以了,第三种,如果暴力的话又变成 2^n种情况,所以可以把A,B排序,符合单调性后,可以使用二分
让A从小到大,B从大到小 当 sum<2*(A[l]+B[r])的时候 A增大 否者B减小。复杂度变为 log 2^n
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; double a[40]; double b[1<<20]; double c[1<<20]; void dfs(int now,int aim,int &n,double value,double p[]) { if(now==aim+1) { p[n++]=value; return; } dfs(now+1,aim,n,value,p); dfs(now+1,aim,n,value+a[now],p); } int main() { int n; while(scanf("%d",&n)==1) { double sum=0; for(int i=1;i<=n;i++) { scanf("%lf",&a[i]); sum+=a[i]; } int n1=0,n2=0; dfs(1,n/2,n1,0,b); dfs(n/2+1,n,n2,0,c); sort(b,b+n1); sort(c,c+n2); double ans= 1000000000000000000.0; for(int i=0;i<n1;i++) ans=min(ans,fabs(sum-2*b[i])); for(int i=0;i<n2;i++) ans=min(ans,fabs(sum-2*c[i])); int l=0,r=n2-1; while(l<n1&&r>=0) { double mid=2*(b[l]+c[r]); if(mid>sum) { r--; ans=min(ans,fabs(sum-mid)); } else { l++; ans=min(ans,fabs(sum-mid)); } } printf("%.2lf\n",ans); } }
相关文章推荐
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 E: qwb和李主席 [折半枚举二分]【思维?套路!】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席 (折半枚举!!!!n堆数分成最接近的两堆!!
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem A: qwb与支教(容斥+二分)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem G: qwb去面试(数学问题)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 A.qwb与支教【二分+简单容斥】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem D: qwb与神奇的序列(数论+快速幂)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 D: qwb与神奇的序列 [矩阵]【数学】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem F: qwb has a lot of Coins (博弈论)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 F: qwb has a lot of Coins [nim]【博弈】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem C: 勤劳的ACgirls (隔板问题)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 G.qwb去面试【贪心】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 G: qwb去面试 [找规律]【思维】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem C: 勤劳的ACgirls(n个相同球放到m个不同的盒子里。)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 I: qwb VS 去污棒 [可持久化01字典树]【数据结构】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 J: qwb又偷懒了 [BIT]【数据结构】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 K: qwb与小数 [快速幂]【思维】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 L: qwb与整数对 [离线]【思维】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 M: qwb与二叉树 [记忆化dp]【动态规划】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 D.qwb与神奇的序列【递推】
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 A: qwb与支教 [容斥]【数学】