https://codeforces.com/contest/1097/problem/D

题意

给你一个n和k,问n经过k次操作之后留下的n的期望,每次操作n随机变成一个n的因数

题解

  • 概率dp计算出每个素因子留下的概率,乘以这个素因子的值就是这个素因子的贡献期望
  • 定义\(dp[i][j]\)为第i次操作后剩下j个素因子的概率,概率dp顺着推
    • \(dp[i][j]->dp[i+1][k](k<=j)\)
    • \(dp[i+1][k]+=dp[i][j]\frac{1}{j+1}(k<=j)\)
  • \(ans=\sum^{cnt}_{i=1}\sum^{num[i]}_{j=0}pr[i]^j*dp[k][j]\)
  • 二维滚动数组滚掉一维

代码

#include<bits/stdc++.h>
#define P 1000000007
#define M 32000000
#define MAXN 100
#define ll long long
using namespace std;
ll dp[2][MAXN],inv[MAXN],n,ans=1;
int vi[M],sz,k,pr[M];
void sieve(){
inv[0]=inv[1]=1;
for(int i=2;i<MAXN;i++)inv[i]=(P-P/i)*inv[P%i]%P; for(ll i=2;i<M;i++){
if(!vi[i])pr[++sz]=i;
for(int j=1;j<=sz&&pr[j]*i<M;j++){
vi[pr[j]*i]=1;
if(i%pr[j]==0)break;
}
}
} int main(){
sieve();
cin>>n>>k;
for(int i=1;i<=sz&&pr[i]<=n;i++){
int cnt=0;
if(n%pr[i])continue;
while(n%pr[i]==0){
n/=pr[i];
cnt++;
}
memset(dp,0,sizeof(dp)); //
dp[0][cnt]=1;
int st=0;
for(int j=0;j<k;j++){
memset(dp[st^1],0,sizeof(dp[st^1]));
for(int p=0;p<=cnt;p++){
for(int q=0;q<=p;q++){
dp[st^1][q]+=dp[st][p]*inv[p+1]%P;
dp[st^1][q]%=P;
}
}
st^=1;
}
ll mul=1,tp=0;
for(int j=0;j<=cnt;j++){
tp+=dp[st][j]*mul%P;
tp%=P;
mul=mul*pr[i]%P;
}
ans=ans*tp%P; //
}
if(n>1){
memset(dp,0,sizeof(dp));
dp[0][1]=1;
int st=0;
for(int j=0;j<k;j++){
memset(dp[st^1],0,sizeof(dp[st^1]));
for(int p=0;p<=1;p++){
for(int q=0;q<=p;q++){
dp[st^1][q]+=dp[st][p]*inv[p+1]%P;
dp[st^1][q]%=P;
}
}
st^=1;
}
ll mul=1,tp=0;
for(int j=0;j<=1;j++){
tp+=dp[st][j]*mul%P;
tp%=P;
mul=mul*n%P;
}
ans=ans*tp%P;
}
cout<<ans;
}

Hello 2019 D 素因子贡献法计算期望 + 概率dp + 滚动数组的更多相关文章

  1. 【BZOJ 3652】大新闻 数位dp+期望概率dp

    并不难,只是和期望概率dp结合了一下.稍作推断就可以发现加密与不加密是两个互相独立的问题,这个时候我们分开算就好了.对于加密,我们按位统计和就好了;对于不加密,我们先假设所有数都找到了他能找到的最好的 ...

  2. HDU 3853 期望概率DP

    期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] ,  右移:[x][y ...

  3. 【BZOJ 3811】玛里苟斯 大力观察+期望概率dp+线性基

    大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率 ...

  4. 【NOIP模拟赛】黑红树 期望概率dp

    这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...

  5. BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp

    首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...

  6. 期望概率DP

    期望概率DP 1419: Red is good ​ Description ​ 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 ...

  7. 【BZOJ 2553】[BeiJing2011]禁忌 AC自动机+期望概率dp

    我一开始想的是倒着来,发现太屎,后来想到了一种神奇的方法——我们带着一个既有期望又有概率的矩阵,偶数(2*id)代表期望,奇数(2*id+1)代表概率,初始答案矩阵一列,1的位置为1(起点为0),工具 ...

  8. UVa 11427 Expect the Expected (数学期望 + 概率DP)

    题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...

  9. 【BZOJ 3925】[Zjoi2015]地震后的幻想乡 期望概率dp+状态压缩+图论知识+组合数学

    神™题........ 这道题的提示......(用本苣蒻并不会的积分积出来的)并没有 没有什么卵用 ,所以你发现没有那个东西并不会 不影响你做题 ,然后你就可以推断出来你要求的是我们最晚挑到第几大的 ...

随机推荐

  1. jdk自带监控程序jvisualvm的使用

    监控小程序的配置 生产环境tomcat的配置 编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下: 配置如下内容: export JAVA_OPTS="- ...

  2. ICP 匹配定位算法学习记录

    icp 算法原理是: 选取目标点云P和源点云Q,按照一定的约束条件,找到最邻近点(pi,qi),然后计算出最优R和t(旋转和平移), 使得误差函数最小,误差函数E(R,t): 基本算法流程: 1.在目 ...

  3. Debug 路漫漫-12:Python: ValueError: 'userid' is both an index level and a column label, which is ambiguous.

    啊,又遇到难题了 == 想要对两个 dataframe 做自然连接 merge,连接的key 为 “userid”,但是报错:ValueError: 'userid' is both an index ...

  4. Map映射如何使用迭代器?

    迭代器只针对集合类型的数据,因此map类型的必须先转换成集合类型才能使用迭代器去获取元素. 1.在map中虽然不能直接实例化迭代器,但map集合提供了keySet()方法和value()方法,可以通过 ...

  5. 【前端知识体系-JS相关】组件化和React

    1. 说一下使用jQuery和使用框架的区别? 数据和视图的分离,(jQuery数据和视图混在一起,代码耦合)-------开放封闭原则 以数据驱动视图(只关注数据变化,DOM操作被封装) 2.说一下 ...

  6. CodeForce 577B Modulo Sum

    You are given a sequence of numbers a1, a2, ..., an, and a number m. Check if it is possible to choo ...

  7. CodeForces 463D DP

    Gargari got bored to play with the bishops and now, after solving the problem about them, he is tryi ...

  8. 数据迁移最快方式,多线程并行执行 Sql插入

    前言: 由于系统升级,新开发的系统对数据验证,及数据关联做了很多优化,现需要将原历史版本的数据迁移到新系统中:原数据库大约有 1千多万数据,大约 50个表. 历史数据库命名为:A. 新系统库暂命名为 ...

  9. opencv代码片段合集

    个人笔记 长期更新 #### 创建一个图片 import cv2 # Not actually necessary if you just want to create an image. impor ...

  10. C# 协变、逆变

    微软官方概述: 在C#中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换.协变保留分配兼容性,逆变则与之相反. 协变:能够使用与原始指定的派生类型相比,派生程度更大的类型. 逆变:能 ...