【题解】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. 爬虫:Selenium + PhantomJS

    更:Selenium特征过多(language/UserAgent/navigator/en-US/plugins),以Selenium打开的浏览器处于自测模式,很容易被检测出来,解决方法可选: 用m ...

  2. linux 端口映射设置

    iptables -t nat -A PREROUTING -p tcp --dport 新端口 -j REDIRECT --to-ports 旧端口

  3. LightOJ 1269 Consecutive Sum (Trie树)

    Jan's LightOJ :: Problem 1269 - Consecutive Sum 题意是,求给定序列的中,子序列最大最小的抑或和. 做法就是用一棵Trie树,记录数的每一位是0还是1.查 ...

  4. @noi.ac - 171@ 立方体

    目录 @description@ @solution@ @accepted code@ @details@ @description@ TonyFang 打算送你一些立方体. 你需要在 [1, n] ...

  5. Android 设置ImageView宽度固定,其高度按比例缩放适应

    今天和项目经理对喷了一下,他说在应用的列表数据中的图片应该宽度固定,高度按比例缩放自适应,我说,那岂不是很丑!直接让运营那边把图片处理成固定宽高比不就好了,省的我客户端麻烦了. 这家伙不同意,为毛呢, ...

  6. 从 SGD 到 Adam —— 深度学习优化算法概览(一) 重点

    https://zhuanlan.zhihu.com/p/32626442 骆梁宸 paper插画师:poster设计师:oral slides制作人 445 人赞同了该文章 楔子 前些日在写计算数学 ...

  7. 【codeforces 520A】Pangram

    [题目链接]:http://codeforces.com/problemset/problem/520/A [题意] 给你一个字符串. 统计里面有没有出现所有的英文字母->'a'..'z' 每个 ...

  8. .net Framework 源代码 · ScrollViewer

    本文是分析 .net Framework 源代码的系列,主要告诉大家微软做 ScrollViewer 的思路,分析很简单. 看完本文,可以学会如何写一个 ScrollViewer ,如何定义一个 IS ...

  9. 用于数组的delete p324

    delete 对象地址; delete 首先调用待清除对象的析构函数,然后释放内存 如果delete一个void指针,唯一发生的事情就是释放了内存.因为通过void指针,无法知道对象的类型,就无法调用 ...

  10. [转]Jquery属性选择器(同时匹配多个条件,与或非)(附样例)

    1. 前言 为了处理除了两项不符合条件外的选择,需要用到jquery选择器的多个条件匹配来处理,然后整理了一下相关的与或非的条件及其组合. 作为笔记记录. 2. 代码 1 2 3 4 5 6 7 8 ...