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

假设一个点有\(x\)个点(包括自己)可以到达他,他就对答案有\(1/x\)的贡献。这是因为这个点必须被删掉而通过删掉这个点本身删掉这个点的概率是\(1/x\),所以对期望的贡献是\(1\times 1/x\)。

如何算\(x\)。\(x\)是唯一分解之后所有的指数的\(gcd\)的约数个数。

此时就有60分了。

考虑对于\(\le \sqrt n\)的数暴力处理,对于\(> \sqrt n\)的数,由于这些数不会有出度,所以只要算他们的入度。众所周知形如\(x^y\)的整数是很少的。具体的,大概是:

\[O(\sum_{i=1}^{\sqrt n} \log_i n)
\]

实在是太小了!所以我们定位一个\(\le \sqrt n\)的数,然后枚举它所有的幂然后暴力计算即可。但是要去重,具体实现用哈希。

还有一些出度入度都为\(0\)的点,直接+1

复杂度\(O(\text{随便过})\)

 //@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<set>
#include<unordered_set> using namespace std; typedef long long ll; typedef long double lb;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(!isdigit(c))f|=c==45,c=getchar();
while(isdigit(c)) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=1e7+5;
int n,usd[maxn],Min[maxn];
vector<int> e;
inline void pre(const int&n){
usd[1]=1; Min[1]=10;
for(int t=2;t<=n;++t){
if(!usd[t])e.push_back(t),Min[t]=t;
for(auto i:e){
if(1ll*i*t>n)break;
usd[i*t]=1,Min[i*t]=i;
if(t%i==0)break;
}
}
} int gcd(const int&x,const int&y){return y?gcd(y,x%y):x;}
inline int getd(int x){
if(x==1)return 1;
int d=0;
while(x>1){
int g=Min[x],cnt=0;
while(x%g==0&&x>1) ++cnt,x/=g;
d=gcd(d,cnt);
}
return d;
}
int K=0;
inline lb getsig(int x){
if(x==1) return 1;
ll ret=1;
while(x>1){
K=max(K,x);
int g=Min[x],cnt=0;
while(x%g==0&&x>1) ++cnt,x/=g;
ret=ret*(cnt+1LL);
}
return (lb)1/ret;
} unordered_set<int> s;
int main(){
pre(maxn-1);
int T=qr();
while(T--){
int n=qr(),N=sqrt(n);
lb ans=0;
for(int t=1;t<=N;++t) ans+=getsig(getd(t));
ll k=2;
for(int t=2,cnt;t<=N;k=++t){
int d=getd(t);
cnt=1;
while(k<=N) k=k*t,++cnt;
while(k<=n){
if(s.find(k)==s.end())
s.insert(k),ans+=getsig(d*cnt);
k=k*t,++cnt;
}
}
ans+=(n-N-s.size());
printf("%Lf\n",ans);
s.clear();
}
return 0;
}

【题解】P5589 小猪佩奇玩游戏(期望)的更多相关文章

  1. P5589 【小猪佩奇玩游戏】

    这题还是比较妙妙套路的,复杂度为\(O(log^2N)\),可以卡掉\(\sqrt n\)的做法 首先我们可以把原数列分成很多个集合,集合之间肯定是两两独立的,考虑分别计算答案 我们定义\(f_i\) ...

  2. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  3. 【洛谷5月月赛】玩游戏(NTT,生成函数)

    [洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...

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

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

  5. Luogu P4705 玩游戏

    题目描述 Alice 和 Bob 又在玩游戏. 对于一次游戏,首先 Alice 获得一个长度为 ​ 的序列 ​,Bob 获得一个长度为 ​ 的序列 bb.之后他们各从自己的序列里随机取出一个数,分别设 ...

  6. 【转载】 DeepMind用ReinforcementLearning玩游戏

    原文地址: https://blog.csdn.net/wishchin/article/details/42425145 原文 :  http://dataunion.org/?p=639 1.引言 ...

  7. [UOJ266]Alice和Bob又在玩游戏

    [UOJ266]Alice和Bob又在玩游戏 Tags:题解 作业部落 评论地址 TAG:博弈 题意 不同于树的删边游戏,删掉一个点删去的是到根的路径 题解 这题只和计算\(SG\)有关,博弈的有关内 ...

  8. UESTC 2015dp专题 G 邱老师玩游戏 背包dp

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

  9. [BZOJ4730][清华集训2016][UOJ266] Alice和Bob又在玩游戏

    题意:俩智障又在玩游戏.规则如下: 给定n个点,m条无向边(m<=n-1),保证无环,对于每一个联通块,编号最小的为它们的根(也就是形成了一片这样的森林),每次可以选择一个点,将其本身与其祖先全 ...

随机推荐

  1. javascript内置函数

    1.Date:日期函数属性(1):constructor 所修立对象的函数参考prototype 能够为对象加进的属性和方法办法(43):getDay() 返回一周中的第几天(0-6)getYear( ...

  2. Mysql 查询一天中每半小时记录的数量

    SELECT HOUR(e.time)as Hour,FLOOR(MINUTE(e.time)/30) as M, COUNT(*) as Count FROM error_log e WHERE e ...

  3. 2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件

    2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件 过去十年间,许多科技公司已开始畅怀拥抱开源.许多公司使用开源工具来运行自己的 IT 基础设施和网站,一些提供与开源工具相关的产品和服 ...

  4. oracle使用表的别名(Alias)

    当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.   (Column歧义指的是由于SQL中不同 ...

  5. 基于ThinkPHP与阿里大于的PHP短信验证功能

    https://blog.csdn.net/s371795639/article/details/53381274 PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号,在用户管理中心创建应用,确定A ...

  6. java super关键字和调用父类构造方法

    表示父类对象的默认引用 如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法. 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另 ...

  7. laravel post提交数据时显示异常

    post提交数据时候显示如下: The page has expired due to inactivity. Please refresh and try again 这是由于在laravel框架中 ...

  8. 2018-9-20-断点调试-Windows-源代码

    title author date CreateTime categories 断点调试 Windows 源代码 lindexi 2018-09-20 17:37:55 +0800 2018-05-1 ...

  9. H3C FTP被动数据传输方式

  10. linux 自动检测 IRQ 号

    驱动在初始化时最有挑战性的问题中的一个是如何决定设备要使用哪个 IRQ 线. 驱动需 要信息来正确安装处理. 尽管程序员可用请求用户在加载时指定中断号, 这是个坏做法, 因为大部分时间用户不知道这个号 ...