codeforces 633E Startup Funding

题意

枚举左端点,对于每个左端点求一个最大的右端点使得最大。

对于得到的这个数组,随机选择k个数,求最小值期望。

题解

对于每个左端点,右端点右移时,是在一个递增、一个递减的函数中取min,二分即可解决。

接下来的问题也很好解决,可以先取log避免精度上溢

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//--- const int N = 1010101; int n, k;
int a[N], b[N], ma[22][N], mi[22][N], c[N];
double sum[N]; int qryma(int l, int r) {
int _ = log2(r-l+1);
return max(ma[_][l], ma[_][r-(1<<_)+1]);
}
int qrymi(int l, int r) {
int _ = log2(r-l+1);
return min(mi[_][l], mi[_][r-(1<<_)+1]);
}
int qry(int l, int r) {
if(l > r || r > n) return 0;
return min(qryma(l, r), qrymi(l, r));
} void init() {
for(int i = 1; (1<<i) <= n; ++i) {
for(int j = 1; j+(1<<i)-1 <= n; ++j) {
ma[i][j] = max(ma[i-1][j], ma[i-1][j+(1<<(i-1))]);
mi[i][j] = min(mi[i-1][j], mi[i-1][j+(1<<(i-1))]);
}
}
sum[0] = 0;
rep(i, 1, N) sum[i] = sum[i-1] + log(i);
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> n >> k;
rep(i, 1, n+1) cin >> a[i], ma[0][i] = a[i]*100;
rep(i, 1, n+1) cin >> b[i], mi[0][i] = b[i];
init();
rep(i, 1, n+1) {
int l = i, r = n, res = i;
while(l <= r) {
int mid = l+r>>1;
if(qryma(i, mid) < qrymi(i, mid)) {
res = mid;
l = mid+1;
} else {
r = mid-1;
}
}
c[i] = max(qry(i, res), qry(i, res+1));
}
sort(c+1, c+1+n);
double ans = 0;
rep(i, 1, n+2-k) {
double t = log(k) + sum[n-i] + sum[n-k] - sum[n-i-k+1] - sum[n];
ans += c[i] * exp(t);
}
cout << setiosflags(ios::fixed);
cout << setprecision(10);
cout << ans << endl;
return 0;
}

codeforces 633E Startup Funding(浮点数处理)的更多相关文章

  1. Manthan, Codefest 16 E. Startup Funding ST表 二分 数学

    E. Startup Funding 题目连接: http://codeforces.com/contest/633/problem/E Description An e-commerce start ...

  2. 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)

    原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解    By 岩之痕 目录: 一:综述 ...

  3. Manthan, Codefest 16

    暴力 A - Ebony and Ivory import java.util.*; import java.io.*; public class Main { public static void ...

  4. CodeForces 604A(浮点数)

    这道题需要注意一个点,浮点数的误差问题 判断里的0.3*a[i]换成3*a[i]/10就过了 这个后面还要专门研究一下 #include <iostream> #include <s ...

  5. Codeforces 1 C. Ancient Berland Circus-几何数学题+浮点数求gcd ( Codeforces Beta Round #1)

    C. Ancient Berland Circus time limit per test 2 seconds memory limit per test 64 megabytes input sta ...

  6. CodeForces 404 Marathon ( 浮点数取模 -- 模拟 )

    B. Marathon time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  7. codeforces 404 B Marathon【fmod对浮点数取余】

    题意:给出一个边长为a的正方形,给出d,给出n,输出走得距离为i个d的时候的坐标 学习的这一篇 http://blog.csdn.net/synapse7/article/details/215956 ...

  8. codeforces Looksery Cup 2015 H Degenerate Matrix 二分 注意浮点数陷阱

    #include <cstdio> #include <cstring> #include <algorithm> #include <string> ...

  9. CodeForces 618A Slime Combining

    http://www.codeforces.com/contest/618/problem/A 明明觉得是水题,而我却做了一个小时. 明明觉得代码没有错,而我却错了好几次. 因为我的名字不叫明明,也不 ...

随机推荐

  1. 陈新宇:CKafka在人脸识别PAAS中的应用

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 我叫陈新宇,在格灵深瞳负责数据流的研发,首先特别感谢如今老师,他们把Kafka一个优秀的消息中间件 ...

  2. 使用HTML+CSS实现鼠标划过的二级菜单栏

    先上效果图: 1.鼠标没在上面 2.鼠标放在一级菜单上,展开二级菜单 3.鼠标放在二级菜单上 代码: (点击此处预览代码效果) <html> <head> <title& ...

  3. centos下对文件某些特定字符串分组统计出现次数

    假如现有数据: { "@timestamp": "2018-10-13T21:55:58+08:00", "remote_addr": &q ...

  4. JS常用时间处理方法

    这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 -- 传送门:http://www.w3school.com.cn/js/jsref_obj_date.asp 时间格式化 -- 转换为 ...

  5. Pdf预览功能实现(asp.net)

    asp.net中使用 1.pdf预览功能实现的插件是pdfjs-1.5.188-dist //引入插件中相关的文件以及jquery文件 @section css{ <link rel=" ...

  6. django分页的两种方式

    第一种自定义分页: def pageDemo(request): ''' 自定义分页] :param request: :return: ''' currentpage=request.GET.get ...

  7. 你所需要的sql数据库资料

     sql语法的特点  1.没有"",所有的字符串都使用''包含  2.它的逻辑相等与赋值运算符一样都是= 如 if 1=1  3.不区别大小写,但是习惯函数上使用大写.所有与数据库 ...

  8. 您必须先调用“WebSecurity.InitializeDatabaseConnection”方法,然后再调用"WebSecurity"类的任何其他方法。

    今天调试程序的时候出现了这个是,可惜没截图! 您必须先调用“WebSecurity.InitializeDatabaseConnection”方法,然后再调用"WebSecurity&quo ...

  9. 阿里云CentOS7 64位安装jdk8和mysql5.6.43及远程连接mysql

    安装mysql 先查看系统是否安装有mysql rpm -qa | grep mysql 返回空值说明没有,有的话先删除 yum remove mysql 下载mysql的repo源 wget htt ...

  10. 【js常用DOM方法】

    介绍几个js DOM的常用方法 获取元素节点 getElementById  getElementsByTagName  getElementsByClassName 先写一个简单的网页做测试: /* ...