题目

翻译:

给出一个n个数字的数列a[1],...,a[n],f(l,r)表示使a[l],a[l+1],...,a[r]组成的新序列中的重复元素只保留一个后,剩下元素的数量(如果l>r,则在计算前先交换l和r)。从1-n中分别选出两个数字l和r(两个数字选时各自独立,每个数字选出1-n的概率相等),求f(l,r)的数学期望。

就是$\dfrac {\sum _{l\leq n}^{l=1}\sum _{r\leq n}^{r=1}f\left( l,r\right) } {n^{2}}$

插入数学公式

然后,我参照这道题的做法写了一个O(log(n)*n^2)

 #include<cstdio>
typedef long long LL;
LL c[];
LL n,ans;
LL a[];
LL next1[];
LL boo[];
LL lowbit(LL x)
{
return x&-x;
}
void add(LL num,LL x)
{
while(num<=n)
{
c[num]+=x;
num+=lowbit(num);
}
}
LL sum1(LL x)
{
LL ans=;
while(x>)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
LL sum(LL l,LL r)
{
return sum1(r)-sum1(l-);
}
int main()
{
LL i,j;
scanf("%lld",&n);
for(i=;i<=n;i++)
scanf("%lld",&a[i]);
for(i=n;i>=;i--)
next1[i]=boo[a[i]],boo[a[i]]=i;
//boo[i]记录数字i第一次出现位置,next1[i]记录第i个数字下一次出现位置
for(i=;i<=n;i++)
if(boo[a[i]]==i)
add(i,);
for(i=;i<=n;i++)
{
for(j=i+;j<=n;j++)
ans+=sum(i,j);
if(next1[i]!=)
add(next1[i],);
}
ans*=;
ans+=n;
printf("%lf",(double)ans/(double)n/(double)n);
return ;
}

然后,就tle了。。。

经过大佬的指点后,我打开了新世界的大门找到了新的方法

例如:1 2 2 2 3
第1个2对1-2,1-3,1-4,1-5,2-2,2-3,2-4,2-5的不相同值的数量有贡献
第2个2对3-3,3-4,3-5的不相同值的数量有贡献
第3个2对4-4,4-5的不相同的值的数量有贡献
由于每一组a-b,b-a(a<b)只计算了其中的一个(a-b),所以要乘2。
由于乘2后所有a-a计算2遍,所以要减去n。

 #include<cstdio>
typedef long long LL;
//bool exist[1001000];
int last[];
LL ans,n;
int main()
{
LL i,t;
scanf("%lld",&n);
for(i=;i<=n;i++)
{
scanf("%lld",&t);
ans+=(i-last[t])*(n-i+);
last[t]=i;
//(last[t]+1)-i,..,(last[t]+1)-n,.....,i-i,..,i-n
//last[t]+1:n-i+1;...i:n-i+1
// if(exist[t])
// ans+=n-i+1;
// else
// {
// exist[t]=true;
// //ans+=i*(n-i+1);
// //n+(n-1)+...+(n-i+1)
// ans+=(2*n-i+1)*i/2;
// }
//错误,无法处理如2 2 4 2的数据
}
printf("%lf",(double)(ans*-n)/(double)n/(double)n);
return ;
}

Random Query CodeForces - 846F的更多相关文章

  1. Codeforces 846F - Random Query

    原题链接:http://codeforces.com/contest/846/problem/F 题意:给一个数列,任意取区间[l, r],问区间内不同数字的个数的期望是多少. 思路: 对于第i个数a ...

  2. CodeForces - 846F Random Query(期望)

    You are given an array a consisting of n positive integers. You pick two integer numbers l and r fro ...

  3. Subtree Minimum Query CodeForces - 893F (线段树合并+线段树动态开点)

    题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询 ...

  4. B. Random Teams(Codeforces Round 273)

    B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  5. 【Educational Codeforces Round28】

    咸鱼选手发现自己很久不做cf了,晚节不保. A.Curriculum Vitae 枚举一下间断点的位置. #include<bits/stdc++.h> using namespace s ...

  6. python爬取微信公众号

    爬取策略 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法.来达到登录的效果 pip3 install selenium c ...

  7. iOS SwiftMonkey 随机暴力测试

    参考源文章 https://github.com/zalando/SwiftMonkey https://kemchenj.github.io/2017/03/16/2017-03-16/ 简介 这个 ...

  8. 如何使用jMeter对某个OData服务进行高并发性能测试

    For project reason I have to measure the performance of OData service being accessed parallelly. And ...

  9. MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...

随机推荐

  1. linux内核模块依赖图

    Module                  Size  Used by btrfs                 880032  0 raid6_pq               97812  ...

  2. SpringBoot项目 部署到服务器的tomcat下

    把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改pom文件 修改打包方式 修改或增加maven插件 注意: 二.移除嵌入式tomcat插件 三.添加servlet ...

  3. field 属性操作

    首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String na ...

  4. linux子系统的初始化_subsys_initcall()

    http://my.oschina.net/u/572632/blog/305492#OSC_h1_3

  5. codeforces A. Kitahara Haruki's Gift 解题报告

    题目链接:http://codeforces.com/problemset/problem/433/A 题目意思:给定 n 个只由100和200组成的数,问能不能分成均等的两份. 题目其实不难,要考虑 ...

  6. 【Selenium】验证是否按照字母顺序排列, 不区分大小写

    验证是否按照字母顺序排列, 不区分大小写 for(int j=0;j<s.length-1;j++){ String temp1=s[j].toLowerCase(); String temp2 ...

  7. POJ - 2142 The Balance(扩展欧几里得求解不定方程)

    d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有 ...

  8. 行内元素变成会计元素block和inline-block的区别

    左边一个ul的导航,习惯了用li里面放a,想要a有个百分百宽和高,这个整个li就都可以有点击事件了,用了inline-block,宽高可以实现,但是发现一个问题,a的左边始终会有个类似于外边距的样式, ...

  9. 【旧文章搬运】Windows句柄分配算法(一)

    原文发表于百度空间,2009-04-04========================================================================== 分析了Wi ...

  10. jqGrid Bootstrap

    <!DOCTYPE html> <html lang="en"> <head> <!-- The jQuery library is a ...