zoukankan      html  css  js  c++  java
  • Codeforces 380E Sereja and Dividing

    题面

    洛谷传送门

    题解

    博客

    有精度要求所以只用求几十次就差不多了

    CODE

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAXN = 300005;
    struct node {
    	int v, id;
    	inline bool operator <(const node &o)const {
    		return v < o.v || (v == o.v && id < o.id);
    	}
    }p[MAXN];
    int n, pre[MAXN], nxt[MAXN];
    int main () {
    	scanf("%d", &n);
    	for(int i = 1; i <= n; ++i)
    		scanf("%d", &p[i].v), p[i].id = i, pre[i] = i-1, nxt[i] = i+1;
    	sort(p + 1, p + n + 1);
    	double ans = 0;
    	for(int i = 1; i <= n; ++i) {
    		double l = 0, r = 0, pw = 1;
    		int x = p[i].id, lp = x, rp = x;
    		for(int j = 1; j <= 50; ++j) {
    			pw /= 2;
    			if(lp) l += pw*(lp - pre[lp]), lp = pre[lp];
    			if(rp<=n) r += pw*(nxt[rp] - rp), rp = nxt[rp];
    		}
    		ans += 2*l*r*p[i].v;
    		nxt[pre[x]] = nxt[x];
    		pre[nxt[x]] = pre[x];
    	}
    	printf("%.15f
    ", ans/n/n);
    }
    
  • 相关阅读:
    一些开发中用到的注解
    ios下设置user-scalable=no无效
    git的使用
    mongoose操作
    mongodb常用命令
    node express安装
    弹窗
    css实现全图滚动
    前端小技巧
    实现移动端轮播图
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039187.html
Copyright © 2011-2022 走看看