Codeforces 846F - Random Query
原题链接:http://codeforces.com/contest/846/problem/F
题意:给一个数列,任意取区间[l, r],问区间内不同数字的个数的期望是多少。
思路:
对于第i个数a[i],它对一些区间都有贡献,这区间一定是包含了这个数,那么假如数列中不存在相同的数,这些区间就是[1, i], [1, i+1], [1, i+2]...[1, n], [2, i]...[2, n]...[i, n],每个区间贡献度为1,这个数的贡献即为(n-i+1)*i*2(由于l,r存在顺序调换,需要乘2)
当数列中存在相同的数时,对于数a[i],前一个相同的数a[j]已经计算了它在包含前j个数的区间的贡献,这样我们只需要加上包含第 j 到 i 的数的贡献,标记a[i]的前一个位置为last[a[i]], 则贡献为 (n-i+1)*(n-last[ a[i] ])*2.
上述计算过程多计算了区间[l, l]的贡献,在最后减去n即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
using namespace std;
const int MAXN=1e6+;
int last[MAXN],num;
int main()
{
int n;
cin>>n;
long long nu=;
memset(last, , sizeof(last));
for(int i=;i<=n;i++) {
scanf("%d", &num);
nu+=1LL*(i-last[num])*(n-i+);
last[num]=i;
}
nu=nu*-n;
cout<<fixed<<nu*1.0/(n*1.0)/(n*1.0)<<endl;
return ;
}
嗯,期望的题目可以通过计算每个元素的贡献度来做 :D
Codeforces 846F - Random Query的更多相关文章
- CodeForces - 846F Random Query(期望)
You are given an array a consisting of n positive integers. You pick two integer numbers l and r fro ...
- codeforces 478B Random Teams
codeforces 478B Random Teams 解题报告 题目链接:cm.hust.edu.cn/vjudge/contest/view.action?cid=88890#probl ...
- Random Query CodeForces - 846F
题目 翻译: 给出一个n个数字的数列a[1],...,a[n],f(l,r)表示使a[l],a[l+1],...,a[r]组成的新序列中的重复元素只保留一个后,剩下元素的数量(如果l>r,则在计 ...
- codeforces 478B Random Teams 解题报告
题目链接:http://codeforces.com/problemset/problem/478/B 题目意思:有 n 个人,需要将这班人分成 m 个 组,每个组至少含有一个人,同一个组里的人两两可 ...
- Codeforces 1067E - Random Forest Rank(找性质+树形 dp)
Codeforces 题面传送门 & 洛谷题面传送门 一道不知道能不能算上自己 AC 的 D1E(?) 挺有意思的结论题,结论倒是自己猜出来了,可根本不会证( 开始搬运题解 ing: 碰到这样 ...
- [Codeforces]850E - Random Elections
FWT裸题,写了下模板 #include<cstdio> #define ll long long #define r register int #define MN (1<< ...
- CodeForces 1067E Random Forest Rank
题意 给定一棵 \(n\) 个节点的树,每条边有 \(\frac{1}{2}\) 的概率出现,这样会得出一个森林,求这个森林的邻接矩阵 \(A\) 的秩 \(\operatorname{rank} A ...
- 【Educational Codeforces Round28】
咸鱼选手发现自己很久不做cf了,晚节不保. A.Curriculum Vitae 枚举一下间断点的位置. #include<bits/stdc++.h> using namespace s ...
- python爬取微信公众号
爬取策略 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法.来达到登录的效果 pip3 install selenium c ...
随机推荐
- 使用spring提供的@Scheduled注解创建定时任务
使用方法 操作非常简单,只要按如下几个步骤配置即可 1. 导入jar包或添加依赖,其实定时任务只需要spring-context即可,当然起服务还需要spring-web: 2. 编写定时任务类和方法 ...
- KETTLE——(例)简单的字段转换
一个简单的小例子:结合数据抽取.简单的字段转换.数据输出. 资源库连接.数据输入.数据输出.参见之前的文章. 基本的转换结构是这样的,我们从表中输入,选择我们需要的字段,已经对应的名称,然后将数据 ...
- Android Framework中Thread类
Thread类是Android为线程操作而做的一个封装.代码在Thread.cpp中,其中还封装了一些与线程同步相关的类. Thread类 Thread类的构造函数中的有一个canCallJava T ...
- JSONPath解析json
JSONPath - 用于JSON的XPath 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. 考虑到接下来计划开发一个自动化测试平台,在 ...
- pyenv python 版本控制
经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...
- 000 (H5*) 知识点总结
https://note.youdao.com/ynoteshare1/index.html?id=ff02e616917fba868f39241c8383d7c7&type=note 目录 ...
- h2内嵌数据库使用
参考文档 1 https://www.cnblogs.com/xdp-gacl/p/4171024.html 参考文档 2 https://blog.csdn.net/mafan121/article ...
- git的基本使用方法
git的基本使用方法:https://blog.csdn.net/qq_33316091/article/details/82414389
- [BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表)
[BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表) 题面 给出n,k,l,r和序列a,要求从a中选一段连续的区间[i,j]出来,使得M(i,j)-m(i,j)/(j-i+k) ...
- spring-security问题记录
一.错误信息 Could not decode JSON for additional information: BaseClientDetails 2019-12-03 22:18:37.239 W ...