CF739E Gosha is hunting 【WQS二分 + 期望】
题目链接
题解
抓住个数的期望即为概率之和
使用\(A\)的期望为\(p[i]\)
使用\(B\)的期望为\(u[i]\)
都使用的期望为\(p[i] + u[i] - u[i]p[i]\)
当然是用越多越好
但是他很烦地给了个上限,我们就需要作出选择了
有一个很明显的\(O(n^3)\)的\(dp\),显然过不了
但我们有一个很好的\(WQS\)二分
我们非常想去掉这个上限
那就去掉吧,但是每用一次都要付出一个代价
我们二分这个代价,当使用次数恰好为为\(a\)和\(b\)时就是答案
再加回付出的代价即可
非常巧妙地变成了\(O(n\log^2n)\)
这种二分技巧非常棒
当我们求的东西有一个限制个数时,可以通过设置代价去掉上限
//Mychael
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
#define eps 1e-9
using namespace std;
const int maxn = 2005,maxm = 100005,INF = 0x3f3f3f3f;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}
return flag ? out : -out;
}
int n,a,b,cnta,cntb;
double p[maxn],u[maxn],A,B,ans;
int work(double cost){
A = cost; cnta = cntb = 0; ans = 0;
int sol; double val;
REP(i,n){
val = 0; sol = 0;
if (p[i] - A > val) sol = 1,val = p[i] - A;
if (u[i] - B > val) sol = 2,val = u[i] - B;
if (p[i] + u[i] - u[i] * p[i] - A - B > val)
sol = 3,val = p[i] + u[i] - u[i] * p[i] - A - B;
if (sol == 1 || sol == 3) cnta++;
if (sol == 2 || sol == 3) cntb++;
ans += val;
}
return cnta;
}
int check(double cost){
B = cost;
double l = 0,r = 1.0,mid;
while (r - l > eps){
mid = (l + r) / 2.0;
if (work(mid) <= a) r = mid;
else l = mid;
}
work(r);
A = l;
return cntb;
}
int main(){
n = read(); a = read(); b = read();
REP(i,n) scanf("%lf",&p[i]);
REP(i,n) scanf("%lf",&u[i]);
double l = 0,r = 1.0,mid;
while (r - l > eps){
mid = (l + r) / 2.0;
if (check(mid) <= b) r = mid;
else l = mid;
}
check(r);
printf("%.8lf",ans + a * A + b * B);
return 0;
}
CF739E Gosha is hunting 【WQS二分 + 期望】的更多相关文章
- CF739E Gosha is hunting DP+wqs二分
我是从其他博客里看到这题的,上面说做法是wqs二分套wqs二分?但是我好懒呀,只用了一个wqs二分,于是\(O(nlog^2n)\)→\(O(n^2logn)\) 首先我们有一个\(O(n^3)\)的 ...
- HZOJ 赤(CF739E Gosha is hunting)
本来没有打算写题解的,时间有点紧.但是这个wqs二分看了好久才明白还是写点东西吧. 题解就直接粘dg的了: 赤(red) 本题来自codeforces 739E,加大了数据范围. 首先对一只猫不会扔两 ...
- CF739E Gosha is hunting
法一: 匹配问题,网络流! 最大费用最大流,S到A,B流a/b费0,A,B到i流1费p[i]/u[i],同时选择再减p[i]*u[i]? 连二次!所以i到T流1费0流1费-p[i]*u[i] 最大流由 ...
- CF739E Gosha is hunting(费用流,期望)
根据期望的线性性答案就是捕捉每一只精灵的概率之和. 捕捉一只精灵的方案如下: 1.使用一个\(A\)精灵球,贡献为\(A[i]\) 2.使用一个\(B\)精灵球,贡献为\(B[i]\) 3.使用一个\ ...
- CF739E Gosha is hunting(费用流/凸优化dp)
纪念合格考爆炸. 其实这个题之前就写过博客了,qwq但是不小心弄丢了,所以今天来补一下. 首先,一看到球的个数的限制,不难相当用网络流的流量来限制每个球使用的数量. 由于涉及到最大化期望,所以要使用最 ...
- [总结] wqs二分学习笔记
论文 提出问题 在某些题目中,强制规定只能选 \(k\) 个物品,选多少个和怎么选都会影响收益,问最优答案. 算法思想 对于上述描述的题目,大部分都可以通过枚举选择物品的个数做到 \(O(nk^2)\ ...
- wqs二分
今天模拟赛有一道林克卡特树,完全没有思路 赛后想了一想,不就是求\(k+1\)条不相交的链,使其权值之和最大嘛,傻了. 有一个最裸的\(DP\),设\(f[i][j][k]\)表示在以\(i\)为根的 ...
- 决策单调性&wqs二分
其实是一个还算 trivial 的知识点吧--早在 2019 年我就接触过了,然鹅当时由于没认真学并没有把自己学懂,故今复学之( 1. 决策单调性 引入:在求解 DP 问题的过程中我们常常遇到这样的问 ...
- 【CF739E】Gosha is hunting(WQS二分套WQS二分)
点此看题面 大致题意: 你有两种捕捉球(分别为\(A\)个和\(B\)个),要捕捉\(n\)个神奇宝贝,第\(i\)个神奇宝贝被第一种球捕捉的概率是\(s1_i\),被第二种球捕捉的概率是\(s2_i ...
随机推荐
- LIFI热火下的VLC基本链路、标准及发展问题
和白炽及荧光灯相比,白光发光二极管(LED)具有寿命长.光效高.功耗低.无辐射.安全性好.可靠性高等特点,被称为"绿色照明"并得到迅猛发展.白光LED在未来市场极具竞争力.世界范围 ...
- oraclejdbc
https://segmentfault.com/q/1010000004952621/a-1020000004955600
- so easy, too happy
一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate • 估计这个任务需要多 ...
- YQCB冲刺周第四天
上图站立会议 任务看板: 今天的任务:做登录身份的验证,区别普通用户和超级管理员 遇到的困难:中文乱码问题
- 作业1.3——Android平台的开发环境的发展演变
一开始的打算是在eclipse的基础上搭建Android平台,在ADT.SDK上兜兜转转,听过一些前车之鉴后,还是选择了Android studio.因为之前安装过eclipse,就省去了JDK下载和 ...
- 深入理解JAVA I/O系列三:字符流详解
字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节 ...
- .NET项目中常用的32个正则表达式总结
最近没事总结了下最近所用到的正则表达式,下面32个是经常用到的,总结下来与大家分享. . "^-?[1-9]\\d*$",//整数 . "^[1-9]\\d*$" ...
- 区别mouseover与mouseenter?
区别mouseover与mouseenter? * mouseover: 在移入子元素时也会触发, 对应mouseout,进入子元素的时候,父元素显示离开状态 * mouseenter: 只在移入当前 ...
- maven在eclipse上的配置
1,安装maven,配置MAVEN_HOME 和 bin Path环境变量. 2,配置maven setting文件 <mirror> <id>alimirrorId ...
- 命令行执行python文件时提示ImportError: No module named 'xxx'
背景: 最近在写接口自动化测试框架的时候发现,框架使用pycharm ide的时候可以正常跑测试用例,但是在dos窗口输入命令执行测试的时候,import项目内部的包时报错“ModuleNotFoun ...