题目链接:传送门

题目大意:

  给出一个整数n写在黑板上,每次操作会将黑板上的数(初始值为n)等概率随机替换成它的因子。

  问k次操作之后,留在黑板上的数的期望。

  要求结果对109+7取模,若结果不是整数,则用分数表示,并对109+7取逆元。

  (1 ≤ n ≤ 1015, 1 ≤ k ≤ 104

思路:

  首先我们要知道,在模109+7的范围内,可以任意进行模109+7的加减乘除运算,因为一个给定的数值,它在模109+7条件下的值是唯一确定的。

  然后我们只要正常地计算,在每次运算之后对109+7取模就好了。

  假设一个数pj的出现概率为x,其中p为质数,j为任意非负整数(假设初始的数为pcc的话,那么0 ≤ j ≤ cc)。那么一次操作留下的数只能是pt(0 ≤ t ≤ j),因为是等概率分布,所以每个留下的数的概率均为x/j = x * inv(j)。(inv表示在模109+7下取逆元)

  标记状态:dp[i][j]为第i次操作后p的j次幂出现的概率;

  那么状态转移方程为:dp[i+1][t] += dp[i][j] * inv(j);(0 ≤ t ≤ j)

  而题目给出的数可能不是一个质数的幂,这怎么办呢?我们知道任意一个正整数可以表示为p1cc1*p2cc2*…*pkcck,对于所有的picci,他们留下的数piji的乘积就是最后留下的数,所以他们对答案的贡献的乘积就是最后的答案。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int md = 1e9 + ; inline void add(int& a, int b) {
a += b;
if (a > md)
a -= md;
} inline void sub(int& a, int b) {
a -= b;
if (a < )
a += md;
} inline int mul(int a, int b) {
return (int) (1LL * a * b % md);
} int fpow(int a, int p) {
int res = ;
for (; p; p >>= ) {
if (p & )
res = mul(res, a);
a = mul(a, a);
}
return res;
} int inv(int x) {
return fpow(x, md-);
} int main()
{
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n;
int k;
cin >> n >> k;
vector <pair<ll, int> > f;
for (ll i = ; i <= n/i; i++) {
if (n % i == ) {
int cc = ;
while (n % i == ) {
n /= i;
cc++;
}
f.emplace_back(i, cc);
}
}
if (n > )
f.emplace_back(n, ); int ans = ;
for (auto& p : f) {
int cc = p.second;
vector <vector<int> > dp(k+, vector<int>(cc+, ));
dp[][cc] = ;
for (int i = ; i < k; i++) {
for (int j = ; j <= cc; j++) {
int tmp = mul(dp[i][j], inv(j+));
for (int t = ; t <= j; t++)
add(dp[i+][t], tmp);
}
} int x = , res = ;
for (int i = ; i <= cc; i++) {
add(res, mul(x, dp[k][i]));
x = mul(x, (int)(p.first % md));
}
ans = mul(ans, res);
}
cout << ans << endl;
return ;
}

Codeforces1097D. Makoto and a Blackboard(数论+dp+概率期望)的更多相关文章

  1. [LnOI2019]加特林轮盘赌(DP,概率期望)

    [LnOI2019]加特林轮盘赌(DP,概率期望) 题目链接 题解: 首先特判掉\(p=0/1\)的情况... 先考虑如果\(k=1\)怎么做到\(n^2\)的时间复杂度 设\(f[i]\)表示有\( ...

  2. codeforces1097D Makoto and a Blackboard 数学+期望dp

    题目传送门 题目大意: 给出一个n和k,每次操作可以把n等概率的变成自己的某一个因数,(6可以变成1,2,3,6,并且概率相等),问经过k次操作后,期望是多少? 思路:数学和期望dp  好题好题!! ...

  3. codeforces#1097 D. Makoto and a Blackboard(dp+期望)

    题意:现在有一个数写在黑板上,它以等概率转化为它的一个约数,可以是1,问经过k次转化后这个数的期望值 题解:如果这个数是一个素数的n次方,那么显然可以用动态规划来求这个数的答案,否则的话,就对每个素因 ...

  4. hdu-5816 Hearthstone(状压dp+概率期望)

    题目链接: Hearthstone Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Other ...

  5. hdu-5781 ATM Mechine(dp+概率期望)

    题目链接: ATM Mechine Time Limit: 6000/3000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Other ...

  6. BZOJ3566:[SHOI2014]概率充电器(树形DP,概率期望)

    Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器, ...

  7. BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)

    Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个 ...

  8. CF1097D Makoto and a Blackboard

    题目地址:CF1097D Makoto and a Blackboard 首先考虑 \(n=p^c\) ( \(p\) 为质数)的情况,显然DP: 令 \(f_{i,j}\) 为第 \(i\) 次替换 ...

  9. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

随机推荐

  1. jq鼠标事件

    鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的.   (1)click单击鼠标事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发.        $('p').cl ...

  2. SharePoint附加内容数据库时报错

    今天遇到一个很奇怪的问题,在sharepoint管理中心中给web application添加内容数据库时报错:The SharePoint database named WSS Content al ...

  3. 按住CTRL多选,按住shift连选的实现

    <tr class="address" v-for="(counts, index) in counts" :key="index" ...

  4. winfrom窗体中嵌套WPF控件

    前言 本文主要介绍如何在winfrom窗体中嵌套WPF控件, 一来是自己记录一下,而来希望能对有需要的朋友提供实现思路. 如有错误请指出...下面进入正题... -1.前期准备 准备一个建立好的win ...

  5. java的http请求实例

    package vqmp.data.pull.vqmpull.common.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory ...

  6. 汉明码(Hamming)编码与纠错原理

    一 汉明码的编解码说明 (一)编码 Hamming(12,8) N=12,表示编码后的比特长度 K=8,待编码数据的比特长度 R=N-K=4,校验位的比特长度 D=3 汉明距离:相邻行之间不同比特数据 ...

  7. Python 12306登陆详细分析及操作

    前面的话: 1.第一次尝试爬虫,登陆12306,有不足的地方,望大家留言告知,谢谢. 2.前面引入了一个requests模块,我不多说,大家都知道干啥的.还有config是我的一个配置文件,因为其中涉 ...

  8. vue-resource 和 axios的区别

    vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的 ...

  9. python flask route中装饰器的使用

    问题:route中的装饰器为什么感觉和平时使用的不太一样,装饰器带参数和不太参数有什么区别?被修饰的函数带参数和不带参数有什么区别? 测试1:装饰器不带参数,被修饰的函数也不带参数. def log( ...

  10. Unity3D Button组管理(给按钮的onclick事件“传递参数”)

    using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI; // ...