题目链接

https://loj.ac/problem/2229

题解

评分标准提示我们可以使用随机化算法。

首先,我们为每一道编号在 \([1, m]\) 以内的题目(这些题目也对应了 \(m\) 个初始的想法)赋一个 \([0, d]\) 以内的随机权值。接下来,我们可以通过 \(O(n)\) 的递推来求出每一道编号在 \((m, n]\) 以内的题目所包含的所有想法对应权值的最小值。记第 \(i(i > m)\) 道题目包含 \(x_i\) 个不同的想法,且这些想法对应权值的最小值为 \(w_i\),那么有 \(w_i\) 的期望值为 \(\frac{d}{x_i + 1}\)。

我们试着证明一下上述结论。在此之前,我们先思考一个值域较小但更为普遍的问题:在 \([0, 1]\) 内选择 \(x\) 个随机变量(变量之间互相独立,且在 \([0, 1]\) 内均匀随机),求选出的这 \(x\) 个变量中第 \(k\) 小值的期望。

我们将该问题做一个转化:求选出的这 \(x\) 个变量中第 \(k\) 小值的期望,等价于求再在 \([0, 1]\) 内选择一个随机变量,求选出的这个变量小于之前选出的 \(x\) 个变量中第 \(k\) 小值的概率。

经过转化之后的问题显然就很好做了。我们考虑按照数值从小到大给这 \(x + 1\) 个变量赋上排名。忽略变量相等的情况,那么这 \(x + 1\) 个变量的排名构成了一个 \(x + 1\) 的排列,且显然,产生各个排列的概率是相同的。\(x + 1\) 的全排列数为 \((x + 1)!\),我们考虑用合法的排列数除以全排列数来求概率,这样,问题转化为了求共有多少种 \(x + 1\) 的排列满足排列的最后一个位置的值不超过 \(k\)。显然合法的排列总数为 \(k \times x!\)。因此概率即为 \(\frac{k \times x!}{(x + 1)!} = \frac{k}{x + 1}\),那么可以得到在 \([0, 1]\) 内选出的 \(x\) 个随机变量中第 \(k\) 小值的期望也为 \(\frac{k}{x + 1}\)。

这个结论其实被直接放在了[ZJOI2015]地震后的幻想乡一题的提示中。

这样,当随机权值的值域为 \([0, d]\) 时,选出 \(x\) 个随机权值的最小值 \(w\) 的期望即为 \(\frac{1}{x + 1} \times d\)。若求得 \(w\) 的期望 \(E\),那么可得 \(x = \frac{d}{E} - 1\)。

对于第 \(i\) 个想法,我们可以通过多次随机化求平均数来得到 \(w_i\) 的期望的近似值。设随机化的次数为 \(T\),那么总时间复杂度为 \(O(Tn)\)。

代码

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

int n, m, from[N][2], a[N];
double answer[N]; int main() {
scanf("%d%d", &n, &m);
int M = 100000000 / n;
for (int i = m + 1; i <= n; ++i) {
scanf("%d%d", &from[i][0], &from[i][1]);
}
for (int tt = 1; tt <= M; ++tt) {
for (int i = 1; i <= m; ++i) {
a[i] = rand();
}
for (int i = m + 1; i <= n; ++i) {
a[i] = min(a[from[i][0]], a[from[i][1]]);
answer[i] += (double) a[i] / M;
}
}
for (int i = m + 1; i <= n; ++i) {
answer[i] = RAND_MAX / answer[i] - 1;
printf("%.0lf\n", answer[i]);
}
return 0;
}

LOJ2229. 「BJOI2014」想法(随机化)的更多相关文章

  1. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  2. 【LOJ】#2230. 「BJOI2014」大融合

    题解 我现在真是太特么老年了 一写数据结构就颓废,难受 这题就是用lct维护子树 ???lct怎么维护子树 这样想,我们给每个点记录虚边所在的子树大小,只发生在Access和link的时候 这样的话我 ...

  3. loj2230 「BJOI2014」大融合

    LCT裸题 我LCT学傻了这题明显可以树剖我不会树剖了 本来的siz是Splay上的子树和,并没有什么用. 所以每个点维护虚子树和和子树和 虚子树和即虚边连接的子树和,且只有在access和link操 ...

  4. Loj 2230. 「BJOI2014」大融合 (LCT 维护子树信息)

    链接:https://loj.ac/problem/2230 思路: 设立siz数组保存虚点信息,sum表示总信息 维护子树信息link操作和access操作需要进行一些改动 可参考博客:https: ...

  5. loj2341「WC2018」即时战略(随机化,LCT/动态点分治)

    loj2341「WC2018」即时战略(随机化,LCT/动态点分治) loj Luogu 题解时间 对于 $ datatype = 3 $ 的数据,explore操作次数只有 $ n+log n $ ...

  6. loj3161「NOI2019」I 君的探险(随机化,整体二分)

    loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起 ...

  7. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. LOJ_2305_「NOI2017」游戏 _2-sat

    LOJ_2305_「NOI2017」游戏 _2-sat 题意: 给你一个长度为n的字符串S,其中第i个字符为a表示第i个地图只能用B,C两种赛车,为b表示第i个地图只能用A,C两种赛车,为c表示第i个 ...

随机推荐

  1. 数据挖掘分类算法之决策树(zz)

    决策树(Decision tree) 决策树是以实例为基础的归纳学习算法.     它从一组无次序.无规则的元组中推理出决策树表示形式的分类规则.它采用自顶向下的递归方式,在决策树的内部结点进行属性值 ...

  2. 跟微软保持适当距离--Hessian + .net 实现RPC体系的企业应用

    同在一个产业链园区的XX厂因为5台Window2003服务器收到了律师函并且被迫下了12万$的采购单,虽然100万对XXX厂来数不是大数目,但是总有种被打劫的感觉. 在企业ERP应用中服务层一般都是做 ...

  3. 查找mysql的my.cnf位置

    1. which mysqld /user/local/mysql/bin/mysqld --verbose --help |grep -A 1 'Default options'

  4. # 20155327 2016-2017-4 《Java程序设计》第9周学习总结

    20155327 2016-2017-4 <Java程序设计>第9周学习总结 20155327 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 了 ...

  5. 线上服务 CPU 100%?一键定位 so easy!

      转自:  https://my.oschina.net/leejun2005/blog/1524687   摘要: 本文主要针对 Java 服务而言 0.背景 经常做后端服务开发的同学,或多或少都 ...

  6. 企业搜索引擎开发之连接器connector(十七)

    本文描述连接器的提供与外界交互的servlet接口,连接器与外部是通过xml格式数据交互的 1)  获取所有连接类型 提交地址:http://localhost:8080/connector-mana ...

  7. 解决PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误

    在用PL/SQL Developer连接数据库时出现“ORA-12541:TNS:无监听程序”错误. 1.检查listener.log日志发现下面错误:TNSLSNR for 32-bit Windo ...

  8. Head First iOS Programming

    内部分享: Head First iOS Programming http://www.slideshare.net/tedzhaoxa/head-first-ios-programming-4606 ...

  9. Lucene--FuzzyQuery与WildCardQuery(通配符)

    FuzzyQuery: 创建索引: IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(), false); writer. ...

  10. 使用Arduino Wire Library读取温湿度传感器AM2321

    AM2321是采用I2C总线或单总线通讯的国产温湿度传感器.在AM2321手册中,当采用I2C通讯时,手册指定了多处需要主机等待的时间间隔,包括: (1)唤醒传感器时,从机不回复ACK,但主机主要等待 ...