profit
Portal --> broken qwq
Description
大M成立的怪兽电力公司最近刚建立了一个网站。这个季度共有\(n\)天,第\(i\)天共有\(v[i]\)个用户点击该网站,总的广告价值为\(c[i]\)。 然而大M并不知道该如何计算收入。他定义某一天的收入\((p[i]=min(100*max(v[i..j]),min(c[i..j]))(j>=i)\)。也许\(j\)不同会导致\(p[i]\)不同,大M会选择一个\(j\)使得\(p[i]\)最大。
大M并不知道该如何算这个季度的每天平均收入。他会随机在\(n\)天中选择\(k\)天\(i_1,i_2...i_k\),则这个季度的每天平均收入就定为\(min(p[i_1],p[i_2]...p[i_k])\)。 你作为他的会计对于他这种计算方法十分不放心。你想要知道在大M的计算下,这个季度的每天平均收入的期望值。
数据范围:对于100%的数据,\(n<=300000,k<=n,v[i]<=10^7,c[i]<=10^9\)
Solution
首先我们假设我们已经求出了\(p\),那么接下来的答案要怎么算?
看到这种最大最小值贡献类的题目。。感觉都有一个比较好的方向就是可以从某一个数作为最值然后反过来计算其贡献
比如说在这题里面就是,考虑每一个\(p[i]\)会在多少中选择中有贡献,具体一点就是我们考虑将\(p\)按照从小到大的顺序排列,然后依次从左往右考虑每一个\(p[i]\)的贡献
对于第\(i\)个位置的\(p\)值,因为这个位置要作为最小值才能有贡献,所以\(i\)前面的数全部都不能选,所以也就是\(\binom {n-i} {k-1}\)种组合(第\(i\)这个位置的数确定要选,然后剩下的\(k-1\)个数只能在后面的\(n-i\)个数里面选),算概率的话就是除以一个总的方案数也就是\(\binom n k\)即可
那么现在的问题是,直接求组合数是不行的(没有模数)
注意到每一个位置乘的系数那个组合数都是\(\binom x {k-1}/\binom n k\)的形式,然后当\(x=n-1\)的时候这个式子是\(=k/n\)的,然后我们发现对于不同的\(i\),在改变的只有\(x\),那我们把这个式子用阶乘的形式写开就发现它可以非常愉快地一路递推回去了(每次\(*(n-i-k+1)/(n-i)\)就可以了)
然后现在的问题就只剩下怎么求\(p\)了
我们观察一下\(p[i]\)的表达式,前半部分是取\(max\)(不递减),后半部分是取\(min\)(不递增),总的又是取\(min\),稍微画一下函数图像之类的就可以发现能更新当前位置的方案一定是前面的\(p\)值或者令题目中的那个\(j\)等于当前位置时候表达式的取值
所以我们可以直接\(O(n)\)dp一下得到\(p\)
然后这题就做完啦ovo
代码大概长这个样子
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=300010;
int v[N],c[N],p[N];
long double ans,C;
int n,k;
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d%d",&n,&k);
for (int i=1;i<=n;++i) scanf("%d",v+i);
for (int i=1;i<=n;++i) scanf("%d",c+i);
p[n]=min(v[n]*100,c[n]);
for (int i=n-1;i>=1;--i){
p[i]=max(p[i+1],100*v[i]);
p[i]=min(p[i],c[i]);
}
sort(p+1,p+1+n);
ans=0; C=(1.0*k)/(1.0*n);
for (int i=1;n-i>=k-1;++i){
ans+=1.0*p[i]*C;
C*=(1.0*n-i-k+1)/(1.0*n-i);
}
printf("%.10Lf\n",ans);
}
/*
input
3 2
3 2 1
300 200 300
output
133.333333
*/
profit的更多相关文章
- 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)
Less Time, More profit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- HDU5855 Less Time, More profit(最大权闭合子图)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5855 Description The city planners plan to build ...
- (转) Reinforcement Learning for Profit
Reinforcement Learning for Profit July 17, 2016 Is RL being used in revenue generating systems today ...
- UVA 10581 - Partitioning for fun and profit(数论递推)
10581 - Partitioning for fun and profit 题目链接 题意:给定m, n,表示分配给n个格子,分配m个数字进去,每一个格子最少1,而且序列要是递增的,问第k个字典序 ...
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...
- hdu_5585_Less Time, More profit(二分+最大权闭合图)
题目链接:hdu_5585_Less Time, More profit 题意: 有n个工厂,每建一个工厂要花费vi,需要时间ti,然后有m个商店,每个商店需要在指定的k个工厂中进货,才能盈利,如果其 ...
- [Educational Round 59][Codeforces 1107G. Vasya and Maximum Profit]
咸鱼了好久...出来冒个泡_(:з」∠)_ 题目连接:1107G - Vasya and Maximum Profit 题目大意:给出\(n,a\)以及长度为\(n\)的数组\(c_i\)和长度为\( ...
- [Swift]LeetCode826. 安排工作以达到最大收益 | Most Profit Assigning Work
We have jobs: difficulty[i] is the difficulty of the ith job, and profit[i] is the profit of the ith ...
- [LeetCode] Most Profit Assigning Work 安排最大利润的工作
We have jobs: difficulty[i] is the difficulty of the ith job, and profit[i] is the profit of the ith ...
- Maximum profit of stocks
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
随机推荐
- 【ANSIBLE】ansible控制windows插件安装及运行error与解决方法
一. 问:因pip版本问题无法安装kerberos 答:安装提示需要先安装pip升级包 下载pip9.0.1升级包: https://pypi.python.org/packages/b6/ac/70 ...
- Python3实现机器学习经典算法(三)ID3决策树
一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...
- Wacom将在CES 2015上发布全新旗舰版Cintiq
Cintiq 27QHD和Cintiq 27QHD touch拥有宽大的工作表面,以及令人惊喜的屏幕笔触和颜色性能. 2015年1月6日,Wacom发布了Cintiq 27QHD和Cintiq 27Q ...
- eBay推Winit海外仓 鼓励卖家拓展北美市场
[亿邦动力网讯]2月11日消息,日前,跨境电商平台eBay与外贸电商服务商万邑通(Winit)合作,针对平台卖家推出了Winit美国海外仓,鼓励卖家拓展北美市场. 亿邦动力网获悉,Winit美国海外仓 ...
- 用js两张图片合并成一张图片
JS和canvas的合成方式 function drawAndShareImage(){ var canvas = document.createElement("canvas") ...
- Python 代码调试技巧
使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变 ...
- KETTLE设置变量
一.kettle变量类型 kettle变量分为: 1.环境变量 通过 set variables组件设置变量,范围可以是:JVM变量.作业变量.父作业变量.根作业变量.使用时通过${var}或 %%v ...
- C++ STL 全排列
摘自爱国师哥博客https://www.cnblogs.com/aiguona/p/7304945.html 一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元 ...
- “Hello World!”团队——Final发布用户使用报告
博客内容: 1.用户体验报告表 2.用户评论截图 3.总结 一.用户体验报告表 用户使用报告 用户类别 用户姓名(化名) 性别 用户职业 使用频次 用户评论 新增用户 小小静 女 中学信息技术老师 8 ...
- lintcode-81-数据流中位数
81-数据流中位数 数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. 说明 中位数的定义: 中位数是排序后数组的中间值,如果有数组中有n个数,则中位数为A[(n-1)/ ...