codeforces 633E Startup Funding(浮点数处理)
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(浮点数处理)的更多相关文章
- Manthan, Codefest 16 E. Startup Funding ST表 二分 数学
		
E. Startup Funding 题目连接: http://codeforces.com/contest/633/problem/E Description An e-commerce start ...
 - 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
		
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
 - Manthan, Codefest 16
		
暴力 A - Ebony and Ivory import java.util.*; import java.io.*; public class Main { public static void ...
 - CodeForces 604A(浮点数)
		
这道题需要注意一个点,浮点数的误差问题 判断里的0.3*a[i]换成3*a[i]/10就过了 这个后面还要专门研究一下 #include <iostream> #include <s ...
 - 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 ...
 - CodeForces 404  Marathon  ( 浮点数取模 -- 模拟 )
		
B. Marathon time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
 - codeforces 404 B Marathon【fmod对浮点数取余】
		
题意:给出一个边长为a的正方形,给出d,给出n,输出走得距离为i个d的时候的坐标 学习的这一篇 http://blog.csdn.net/synapse7/article/details/215956 ...
 - codeforces Looksery Cup 2015 H Degenerate Matrix 二分 注意浮点数陷阱
		
#include <cstdio> #include <cstring> #include <algorithm> #include <string> ...
 - CodeForces 618A Slime Combining
		
http://www.codeforces.com/contest/618/problem/A 明明觉得是水题,而我却做了一个小时. 明明觉得代码没有错,而我却错了好几次. 因为我的名字不叫明明,也不 ...
 
随机推荐
- Lenovo笔记本Fn的总结
			
Fn与其他按键结合使用以访问特殊的ThinkPad功能. Fn+F2 锁定计算机 Fn+F3 管理电池和电源 Fn+F4 进入睡眠(待机)模式 Fn+F5 管理无线连接 Fn+F6 打印屏幕 Fn+ ...
 - flask框架的学习
			
---恢复内容开始--- 第一个flask程序讲解:1. 第一次创建项目的时候,要添加flask的虚拟环境.添加虚拟环境的时候,一定要选择到python这个执行文件.比如你的flask的虚拟环境的目录 ...
 - ES6常用七大特性
			
ES6可谓是对JS语言的一个颠覆性改变,增加了Module改善JS一直被诟病的模块化.Promise解决异步函数的回调地狱.Class的面相对象编程... 在学习ES6的过程中,大家或多或少都有看过阮 ...
 - 从0开始整合SSM框架--3.整合SpringMvc
			
前面面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合.1.配置spring-mvc.xml <beans xmlns="http://ww ...
 - Web开发技术选型之Java与PHP
			
PHP与J2EE的对比 网上有很多关于PHP与J2EE之间的对比,细观无非以下几点: 1.语言特征 PHP为脚本语言,解释型语言,弱类型,专为Web开发打造.Java为C语言系编程语言,编译型,强类型 ...
 - DynamicJasper入门
			
JasperReport 在了解DynamicJasper之前不得不先了解一下jasperReport,jasperReport是基于Java的一个开源的报表工具,它使得你可以在Java环境下像其它的 ...
 - JAVA工具系列之——Postman
			
1 概述 Postman是一款测试rest接口的工具,可以实现前端未实施的情况下,后端同步开发.本文从部署到运用进行展开描写. 2 部署 第一步:进入Postman官网下载最新版本,下载链接 第二步: ...
 - 秒懂String,StringBuilder与StringBuffer
			
StringBuilder与StringBuffer: StringBuilder:线程不安全 StringBuffer:线程安全 当我们在字符串缓冲区被多个线程使用时,JVM不能保证StringBu ...
 - 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
			
转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...
 - MySQL常见常用的SQL优化
			
应尽量避免在where中使用!=或<>操作符.否则会进行全表查询 对于查询,避免全盘扫描,考虑在where或order by涉及到的列上建立索引 避免在where中进行null值判断,否则 ...