这题还是比较妙妙套路的,复杂度为\(O(log^2N)\),可以卡掉\(\sqrt n\)的做法

首先我们可以把原数列分成很多个集合,集合之间肯定是两两独立的,考虑分别计算答案

我们定义\(f_i\)为集合大小为i出现过多少次(集合大小最多为\(logN\)级别),\(g_i\)表示集合大小为i删除完的期望步数

那么答案是可以表示成\(\sum_{i=1}^{log_N}{f_i*g_i}\)

现在考虑怎么求出\(f_i, g_i\)

你可能会好奇题目下方的提示有什么用,没错他就是给你求\(f_i\)用的

考虑集合大小至少为i出现了多少次,记之为\(p_i\),那么\(p_k=n^{\frac{1}{k}}\)

再考虑容斥,因为这个集合是有序集合,集合大小为\(a\)的集合出现在集合大小为\(b\)的集合中出现了\(\frac{b}{a}\)次

证明:假设一个集合开始元素是\(x\),那么\(x^{a*k}≤x^{b}\),即\(a*k≤b\),即\(k ≤ \frac{b}{a}\)

由于f集合大小不大,我们暴力算就行了,这里复杂度为\(O(log^2N)\)(可能可以套一个整除分块优化至\(O(logN*log \sqrt N)\),不太清楚怎么做)

然后考虑怎么就\(g_i\)(打表!)

对于每一个集合,我们只取他们的对数,于是问题就转化成给定一个排列,每次可以删除一个数及其倍数,求期望删除次数

发现对于每一个数,假设他的约数个数为\(d_i\),那么他是可能被\(d_i\)个数删除的

考虑递推求出\(g_i\),那么\(g_i=g_{i-1}+\frac{1}{d_i}\)(一个数会被\(d_i\)个数删完,只有\(\frac{1}{d_i}\)的概率需要多花费一次来删掉这个新加入的数)

那么我们就做完了,总体复杂度为\(O(log^2N)\)

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
#define rep(i, s, t) for(int i = s; i <= t; ++ i)
#define drep(i, s, t) for(int i = t; i >= s; -- i)
#define maxn 100005
int p[maxn], f[maxn], n, m;
double g[maxn], ans;
bool check(int a, int b, int n) {
long long pax = a;
for(; b; b --, pax = pax * a) if(pax > 1ll * n) return 1;
return 0;
}
int get(int i, int n) {
int l = 1, r = n, ans = n;
while(l <= r) {
int mid = (l + r) >> 1;
if(check(mid, i, n)) r = mid - 1, ans = mid;
else l = mid + 1;
}
return ans - check(ans, i, n);
}
int d(int x) {
int ans = 1;
rep(i, 2, 30) {
if(x % i) continue;
int tot = 0;
while(x % i == 0) ++ tot, x /= i;
ans *= (tot + 1);
}
return ans;
}
void init() {
g[1] = 1.0;
rep(i, 2, 30) g[i] = g[i - 1] + 1.0 / d(i);
}
int main() {
init(), scanf("%d", &m);
while(m --) {
scanf("%d", &n), ans = 1, p[31] = 1;
rep(i, 1, 30) p[i] = get(i, n);
rep(i, 1, 30) f[i] = p[i] - p[i + 1];
drep(i, 1, 30) rep(j, 2, 30) f[i / j] -= f[i];
rep(i, 1, 30) ans += g[i] * f[i];
printf("%.10lf\n", ans);
}
return 0;
}

P5589 【小猪佩奇玩游戏】的更多相关文章

  1. 【题解】P5589 小猪佩奇玩游戏(期望)

    [题解]P5589 小猪佩奇玩游戏(期望) 假设一个点有\(x\)个点(包括自己)可以到达他,他就对答案有\(1/x\)的贡献.这是因为这个点必须被删掉而通过删掉这个点本身删掉这个点的概率是\(1/x ...

  2. 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...

  3. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  4. 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和

    小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...

  5. cdoj 1136 邱老师玩游戏 树形背包

    邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1136 Desc ...

  6. win7系统玩游戏不能全屏的解决办法

    1.修改注册表中的显示器的参数设置   Win键+R键,打开运行窗口,输入regedit回车,这样就打开了注册表编辑器,然后,定位到以下位置:   HKEY_LOCAL_MACHINE\SYSTEM\ ...

  7. 【用PS3手柄在安卓设备上玩游戏系列】连接手柄和设备

    背景 硬件要求1:PS3 手柄 + 手柄配套的USB线 硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备 软件要求1:Sixaxis Compatibility Checker PS3 手柄 ...

  8. UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>

    G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. 【特殊的图+DP】【11月校赛】大家一起玩游戏

    大家一起玩游戏 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submi ...

随机推荐

  1. vue-cli输入命令vue ui没效果

    最近用vue-cli脚手架很顺口,特别是UI控制台,在这里,创建项目和搭建本地环境,连接服务端变得很容易,页面ui也是一流 要怎么启动呢?在终端输入命令行vue ui,启动UI控制台,然后往浏览器输入 ...

  2. (1)SQL Server内存浅探

    1.前言 对于数据库引擎来说,内存是一个性能提升的重要解决手段.把数据缓存起来,可以避免在查询或更新数据时花费多余的时间,而这时间通常是从磁盘获取数据时用来等待磁盘寻址的.把执行计划缓存起来,可以避免 ...

  3. 记CentOS 发布.NET Core 2.0

    centos 7.x sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e & ...

  4. 勒索病毒,华为/H3C三层交换机/路由器用ACL访问控制实现端口禁用

    前不久勒索病毒横行,很多人都纷纷中招,从公司到个人,损失相当惨重.有些公司在互联网入口上做了控制,但是这样并非完全,万一有人把中了毒的U盘插入网内设备上呢?那我们的内网中很有可能集体中招(打过相关补丁 ...

  5. 关键字ref、out

    通常,变量作为参数进行传递时,不论在方法内进行了什么操作,其原始初始化的值都不会被影响: 例如: public void TestFun1() { ; TestFun2(arg); Console.W ...

  6. ASP.NET SignalR 系列(二)之项目创建

    一.项目环境 IDE:VisualStudio 2015 SignalR 2.3.0 JQuery版本1.10.1 ,要求必须1.6.4以上 .net Framework 4.6 SignalR2.0 ...

  7. 手写MQ框架(一)-准备启程

    一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...

  8. Oracle 11g 体系结构概述

    一.Oracle 体系结构主要用来分析数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. Oracle 数据库是一个逻辑概念,而不是物理概念上安装了 Oracle 数据库管理系统的服务 ...

  9. Objective-C 知识点拾遗

    -- :: UIWebView的使用总结 UIWebView全解

  10. MySQL MHA候选主库选择

    MHA在选择新主库时,会将所有存活的从库分为下面几类: 存活从库数组:挑选所有存活的从库 最新从库数组: 挑选Master_Log_File+Read_Master_Log_Pos最高的从库 优选从库 ...