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 明明觉得是水题,而我却做了一个小时. 明明觉得代码没有错,而我却错了好几次. 因为我的名字不叫明明,也不 ...
随机推荐
- 498_Diagonal-Traverse
目录 498_Diagonal-Traverse Description Solution Java solution Python solution 1 Python solution 2 Pyth ...
- Scrum 冲刺博客第六篇
一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 判断用户输入的答案是否正确并将其输出到界面中 今天计划完成的工作 对排行榜 ...
- eclipse下JAVA的搭建
练手JAVA用eclipse比android studio快很多,android studio啥都好,就是太慢 参考资料:http://blog.csdn.net/21aspnet/article/d ...
- WebUtility(提供在处理 Web 请求时用于编码和解码 URL 的方法。)
public static string UrlEncode( string str ) UrlEncode(String) 方法可用来编码整个 URL,包括查询字符串值. 如果没有编码情况下,如空格 ...
- ef——存储过程
数据库中存在存储过程GetCategory: ALTER proc [dbo].[GetCategory] @cid int as begin select * from Categories w ...
- vscode下eslint代码规范
直接上规范吧: // 将设置放入此文件中以覆盖默认设置 { "editor.fontSize": 17, "editor.tabSize": 2, " ...
- 在ASP.NET中过滤HTML字符串总结
先记下来,以作备用! /// <summary>去除HTML标记 /// /// </summary> /// <param name="Htmls ...
- [javaSE] 数据结构(二叉查找树-插入节点)
二叉查找树(Binary Search Tree),又被称为二叉搜索树,它是特殊的二叉树,左子树的节点值小于右子树的节点值. 定义二叉查找树 定义二叉树BSTree,它保护了二叉树的根节点BSTNod ...
- Java调用TSC打印机进行打印
最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机 ...
- 动态页面技术之JSP
1.什么是JSP技术 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起 ...