[概率DP][多项式取模] NOI2017.day1 T3 泳池

获胜的概率2 问题描述 有n(2≤n≤10)个玩家玩游戏,他们按1到n编号。第i(1≤i≤n)个玩家有ti个喜欢的玩家,给出第i个玩家喜欢的玩家的编号列表。最初1号玩家拿着一朵花,游戏进行k(0≤k≤1018)个回合,每个回合拿着花的人会把花等概率地送给自己喜欢的人之一,k回合游戏后拿着花的人获胜。分别求n个人获胜的概率,对10⁹+7取模。输入格式 第一行,包括两个正整数n,k,分别表示玩家人数和游戏轮数。以下n行,每行首先有一个非负整数ti(1≤ti≤n),表示第i个玩家有ti个喜欢的人。 阅读详情

f(i,j)表示高度为i,长度为j的局域,i这个行存在障碍,前i-1行不存在障碍,能选取的区域<=k的概率

那么fi,j=∑k<jfi,k∗pi−1∗q∗gi,j−k−1+∑k<jgi,k∗gi,j−k−1∗pi−1∗qfi,j=∑k<jfi,k∗pi−1∗q∗gi,j−k−1+∑k<jgi,k∗gi,j−k−1∗pi−1∗q,
其中p为一个格子安全的概率,q,为一个格子危险的概率。
gi,jgi,j表示i行,长度为j的区域不存在障碍,能选去的区域<=k的概率
那么gi,j=∑s>ifs,kgi,j=∑s>ifs,k

这样转移一下就可以了
可以按段转移,设h(i)h(i)为长度为i的答案
那么h(i)=∑kj=1h(i−j)∗g(1,j)h(i)=∑j=1kh(i−j)∗g(1,j)
这是一个线性递推式,用多项式取模可以完成。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

const int N=5100,P=998244353;

inline int Pow(int x,int y){
  int ret=1;
  for(;y;y>>=1,x=1LL*x*x%P) if(y&1) ret=1LL*ret*x%P;
  return ret;
}

inline int inv(int x){
  return Pow(x,P-2);
}

inline void add(int &x,int y){
  (x+=y)%=P;
}

int n,k,x,y,p,q;
int f[N][N],g[N],pw[N],h[N],a[N],F[N],d[N];

int rev[N],w[2][N],num;

inline void NTT(int *a,int n,int r){
  for(int i=1;i<n;i++) if(rev[i]>i) swap(a[i],a[rev[i]]);
  for(int i=1;i<n;i<<=1)
    for(int j=0;j<n;j+=i<<1)
      for(int k=0;k<i;k++){
    int x=a[j+k],y=1LL*w[r][n/(i<<1)*k]*a[i+j+k]%P;
    a[j+k]=(x+y)%P; a[i+j+k]=(x+P-y)%P;
      }
  if(!r) for(int i=0,iv=Pow(n,P-2);i<n;i++) a[i]=1LL*a[i]*iv%P;
}

inline void Pre(int n,int l){
  for(int i=1;i<n;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<l);
  int g=Pow(3,(P-1)/n),ig=inv(g); w[0][0]=w[1][0]=1;
  for(int i=1;i<n;i++)
    w[0][i]=1LL*w[0][i-1]*ig%P,w[1][i]=1LL*w[1][i-1]*g%P;
}

inline void Mul(int *a,int *b,int m){
  int l=-1,M; for(M=1;M<(m<<1);M<<=1) l++; Pre(M,l);
  if(a==b){
    NTT(a,M,1);
    for(int i=0;i<M;i++) a[i]=1LL*a[i]*a[i]%P;
    NTT(a,M,0);
    return ;
  }
  NTT(a,M,1); NTT(b,M,1);
  for(int i=0;i<M;i++) a[i]=1LL*a[i]*b[i]%P;
  NTT(a,M,0); NTT(b,M,0);
}

int tmp[N],A[N],B[N];

void Inv(int *a,int *b,int n){
  if(n==1) return b[0]=inv(a[0]),void();
  Inv(a,b,n+1>>1);
  static int tmp[N];
  int L=0; while(!(n>>L&1)) L++; Pre(n<<1,L);
  for(int i=0;i<n;i++) tmp[i]=a[i];
  for(int i=n;i<n<<1;i++) tmp[i]=0;
  NTT(tmp,n<<1,1); NTT(b,n<<1,1);
  for(int i=0;i<n<<1;i++)
    tmp[i]=(2LL*b[i]%P+P-1LL*tmp[i]*b[i]%P*b[i]%P)%P;
  NTT(tmp,n<<1,0);
  for(int i=0;i<n;i++) b[i]=tmp[i];
  for(int i=n;i<n<<1;i++) b[i]=0;
}

int t[N],bb[N];

inline void Div(int *a,int n,int *b,int m){
  static int tmp[N],A[N],B[N];
  for(int i=0;i<m;i++) t[i]=b[m-i-1];
  for(int i=0;i<n;i++) A[i]=a[n-i-1];
  int nn=1,d=n-m+1; for(;nn<d<<1;nn<<=1);
  for(int i=n;i<nn;i++) A[i]=0;
  for(int i=d;i<nn;i++) t[i]=0;
  for(int i=0;i<nn;i++) B[i]=0;
  Inv(t,B,nn);
  for(int i=d;i<nn;i++) B[i]=0;
  Mul(A,B,max(n,d));
  for(int i=d;i<=n<<1;i++) A[i]=0;
  for(int i=0;i<d;i++) if(i>d-i-1) swap(A[i],A[d-i-1]);
  for(int i=0;i<m;i++) t[i]=b[i];
  Mul(t,A,max(d,m));
  for(int i=0;i<n;i++) a[i]=(a[i]+P-t[i])%P;
}

inline void mul(int *a,int *b,int m){
  Mul(a,b,m);
  Div(a,2*m,d,m+1);
}

inline void Pow(int *a,int m,int n,int *b){
  for(;n;n>>=1,mul(a,a,m))
    if(n&1) mul(b,a,m);
}

inline int solve(int m){
  memset(f,0,sizeof(f)); memset(g,0,sizeof(g));
  f[m+1][1]=1LL*pw[m]*q%P; g[0]=1; g[1]=f[m+1][1];
  for(int i=m;i;i--){
    f[i][0]=1;
    for(int j=1;(i-1)*j<=m && j<=m;j++)
      for(int s=1;s<=j;s++){
                if(s>1) add(f[i][j],1LL*f[i][s-1]*g[j-s]%P*pw[i-1]%P*q%P);
                add(f[i][j],1LL*g[s-1]*g[j-s]%P*pw[i-1]%P*q%P);
      }
    if(i==1) memcpy(h,g,sizeof(h));
    for(int j=1;(i-1)*j<=m && j<=m;j++)
      add(g[j],f[i][j]);
  }
  if(n<=m) return g[n];
  for(int i=m+1;i;i--)
    h[i]=1LL*h[i-1]*q%P;
  m++;
  memset(a,0,sizeof(a)); memset(d,0,sizeof(d));
  memset(F,0,sizeof(F));
  for(int i=0;i<m;i++) d[i]=(P-h[m-i])%P;
  d[m]=1; a[1]=1;
  F[0]=1;
  Pow(a,m,n,F);
  int ret=0;
  for(int i=0;i<m;i++) add(ret,1LL*F[i]*g[i]%P);
  return ret;
}

int main(){
  scanf("%d%d%d%d",&n,&k,&x,&y);
  p=1LL*x*inv(y)%P; q=(1+P-p)%P; pw[0]=1;
  for(int i=1;i<=k;i++) pw[i]=1LL*pw[i-1]*p%P;
  printf("%d\n",(solve(k)+P-solve(k-1))%P);
  return 0;
}
linux和mac安装+配置circos( 一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。 阅读详情

相关推荐

从‘哒哒’声到静音顺滑:一文搞懂42步进电机细分控制的原理与实战(以TMC5160为例)

本文详细解析了42步进电机细分控制技术,以TMC5160为例,探讨如何通过正弦波电流调制和自适应波形整形实现静音运行。文章提供了实战配置指南,包括硬件连接、寄存器配置和调试技巧,帮助用户有效消除电机噪声,提升3D打印机、CNC机床等设备的运行效率。

weixin_42657024的博客 312

D. Fafa and Ancient Alphabet【求概率+分数取模】

D. Fafa and Ancient Alphabet time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Ancient Egyptians are known to

Haipai1998的博客 1564

量化策略开发步骤系列(5)前向测试和统计意义

我们在第 4 部分,展示了我们策略的样本外测试并讨论了其结果。用于开发模型的数据是 2018 年至 2021 年的数据,测试数据是 2021 年至 2022 年的数据。但有一种方法可以更好地利用我们的数据。

码上助君的专栏 1843

多项式取模

又是一个毒瘤操作。 首先我们可以干这么一件很有趣的事情。 把一个多项式的所有系数reverse了。 然后再把代进去,然后再乘上一个,又变回原来的多项式了。 数学讲就是 所以它转回去了。 切入正题:给定n次多项式A,m次多项式B,求的一个D和R,使得 ,且R的最高次小于m。dzyo说可以证明DR唯一。 所以我们可以这么干。 两边同乘x^n 所以...

gigo_64 sink in my world 2267

通过声音识别鸟类

根据野生鸟类的外表来识别它是一回事。仅仅根据声音来识别同一只鸟是另一回事。除非你是一个熟练的观鸟者,通过声音识别鸟类可能相当具有挑战性德国马尔堡大学的一组数学、计算机科学和生物学研究人员设计了一种快速识别鸟类和监测当地生物多样性的方法。他们使用连接到 NVIDIA 的便携式设备拍摄的录音根据研究人员的说法是一个边缘人工智能系统,“基于分布式系统中运行的嵌入式边缘设备,能够对森林中记录的声景进行高效、连续的评估。”要了解更多信息,请参阅。

分享AI前沿科技 1679

链家二手房信息爬取(内附完整代码)

链家二手房信息爬取1.简介2. 爬虫思路2.1 网页分析2.2 详情页分析2.3 不同页码的爬取2.4 解决链家只显示100页数据2.5 简单的反爬与进度条显示3. 总结 1.简介   最近帮同学爬取了链家在售二手房的信息,这是本人学习爬虫以来爬取数据最多的一次,就想着写个博客记录一下。   本次爬虫是利用python+jupyter notebook实现的,用到的第三方库如下: import pandas as pd # 数据存储 import requests # 网页内容获取 import re #

qq_46256922的博客 3万+

多项式mod的运算(例题)

https://blog.csdn.net/yaongtime/article/details/17200401 根据上述作者方法此处作一例题,题目对应https://www.bilibili.com/video/BV1zt411S7r8 信息安全数学基础——哈尔滨工业大学P27题目

OOOOOOAAAAA的博客 4890

新手必看!一步步教您如何获取可用的D音Cookie(为什么我复制的D音Cookie无法正常使用?)

新手必看!一步步教您如何获取可用的抖音Cookie(为什么我复制的抖音Cookie无法正常使用,无法下载无水印视频?)

XiaoqiangClub的博客 1491

概率取值模拟算法

有这样一个需求,从一个给定的集合中随机取一个值。集合如下: int[] seeds = { 1, 2, 3, 4, 5 }; 要求:取得的值为1、2、3、4、5的概率分别为 5%、5%、5%、35%、50% 其实可以创建一个集合来模拟这个取值,如下: Listint> seedList = new Listint>(18) {

Sun.ME的博客 2434

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3671

DBeaver配置本地mysql-connector驱动文件

本文摘要:介绍了数据库驱动管理的基本操作步骤:1)新建驱动管理器,填写MySQL驱动名称、类名和类型;2)添加本地MySQL驱动文件;3)创建数据库连接并测试。适用于MySQL5.x和8.x版本,帮助用户快速配置数据库连接。

litlit023的专栏 1679

多项式取模及其应用

前置知识 多项式求逆。 多项式取模 问题描述 求A(x)A(x) modmod B(x)B(x),其中degAdegA>=degBdegB Solution 令A(x)=B(x)C(x)+D(x)A(x)=B(x)C(x)+D(x),其中degDdegDdegBdegB 设degAdegA=nn,degBdegB=mm,则degDdegD m m,degCdegCnn-m

XianHaoMing的博客 5588

在树莓派4B上基于NCNN框架部署YOLOv8的实战教程

摘要:本文详细介绍了在树莓派4B上基于NCNN框架部署YOLOv8目标检测模型的完整流程。从PyTorch模型转换为NCNN格式,到树莓派环境配置(OpenCV和NCNN编译),再到C++代码实现与优化,涵盖模型加载、推理和绘图等核心功能。测试结果显示,树莓派4B上可实现约2 FPS的检测速度,Windows平台达6~7 FPS。文章还提供了量化模型、多线程优化等实用建议,并附常见问题解答,为边缘设备部署轻量化目标检测提供了可行方案。(149字)

m0_64661770的博客 595

多项式mod的运算方法

伽罗华域(Galois Field,GF)中关于多项式的mod运算过程,也不知道这样称合适不。这里主要是以构造GF(23)域为例,说明mod的运算过程, 假设本原多项式为p(x)=x3+x+1,α定义为 p(x)= 0的根,即 α3+α+1 = 0, GF(23)中的元素可计算如下: 0 mod(α3+α+1) = 0 α0 mod(α3

yaongtime的专栏 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

多项式的求逆、取模和多点求值学习小记

最近学习了多项式的求逆、取模和多点求值,这些方法能够解决很多多项式问题。 这三个操作是环环相扣的,很有趣,学完后不妨记录一下。 多项式求逆 给出一个次数界为 nnn 的多项式 A(x)A(x)A(x) ,需要求 B(x)B(x)B(x) 满足: A(x)B(x)≡1(mod&nbsp;xn)A(x)B(x)\equiv1(mod\ x^n)A(x)B(x)≡1(mod&nbsp;x...

Felix-Lee的博客 1962

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

多项式运算

多项式乘法 多项式求逆 多项式开根 前置知识:多项式牛顿迭代: 用于寻找多项式零点,已知多项式GGG,求满足G(F(x))≡0(modxn)G(F(x))\equiv0\pmod {x^n}G(F(x))≡0(modxn)的F(x)F(x)F(x) 假设已经求出了G(F0(x))≡0(modxn2)G(F_0(x))\equiv0\pmod {x^{\frac n2}}G(F0​(x))≡0(modx2n​) 将G(F(x))G(F(x))G(F(x))在F0(x)F_0(x)F0​(x)处泰勒展开: G

Master.Yi的博客 1916

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

多项式除法&取模

除法&取模 设 nnn 次多项式 F(x)F(x)F(x) 和 mmm 次多项式 G(x)G(x)G(x) ,求 n−mn-mn−m 次多项式 Q(x)Q(x)Q(x) 和 m−1m-1m−1 次多项式 R(x)R(x)R(x) 满足F(x)=G(x)Q(x)+R(x)F(x)=G(x)Q(x)+R(x)F(x)=G(x)Q(x)+R(x) 于是我们有 F(1x)=G(1x)Q(1x)+...

Johnny817的博客 1751

常系数齐次递推 / 多项式取模

例题 给定G(次数界3w左右),求F(x)=11−G(x)F(x)=\frac 1 {1-G(x)}F(x)=1−G(x)1​的第n项,保证G(x)[x0]=0G(x)[x^0]=0G(x)[x0]=0。 n在1e9以上。 有毛病 毒瘤 毒瘤 毒瘤 式子就是F(x)=1+F(x)G(x)F(x)=1+F(x)G(x)F(x)=1+F(x)G(x) 这是什么意思呢 其实就相当于一个齐次线性递推。 f...

一位蒟蒻的小博客 899

算概率

算概率 简述题意: 牛牛一共做了n道题,他不知道自己到底做对几道题, 然而他知道这n道题的正确率分别为p1,p2,p3…pn. 求他做对k道题0 <= k <= n的概率 输出一行n+1个数表示做对0题,做对1题…做对n题的概率 解题思路 依旧是dp 我们设一个数组为dp[i][j],代表的含义是在前i题中做对j题 状态转移方程是dp[i][j]=dp[i][j−1]∗p[i]+(1+...

Rocinantes' Blog 248

Gym 101845

G :Generating Texts 题目连接: https://codeforces.com/gym/101845/problem/G 题意: 给你一个长度为m的字符串s,求是长度为n的字符串的子序列的概率。对于长度为n的字符串,给出26个字母分别出现的概率。结果对1e9+7取模。 题解: 其实就是构造出包含s的长度为n的字符串,很明显是动态规划问题。 定义dp[i][j]为当前长度为i时,包...

weixin_42973524的博客 1502

Re.多项式除法/取模

前言 emmm又是暂无 前置 多项式求逆 多项式除法/取模目的 还是跟之前一样顾名思义】 给定一个多项式F(x),请求出多项式Q(x)和R(x),满足F(x)=Q(x)∗G(x)+R(x),R项数小于G,系数对998244353取模。 多项式除法/取模主要思路 先考虑一个多项式的反转操作 就是一个多项式系数前后调换 定义这个反转的操作下标加个R ...

aan19999的博客 386

bzoj4944 [Noi2017]泳池(dp,概率与期望)

首先把求最大面积恰为K的概率转化成 求最大面积&amp;amp;lt;=K的概率-最大面积&amp;amp;lt;=K-1的概率 我们注意到最底层一定是选了若干段&amp;amp;lt;=K的连续段,于是我们可以枚举连续段的长度来dp。 我们考虑f[i][j]f[i][j]f[i][j]表示底边长为i,且每一列都向上延伸至少h的高度且满足面积&amp;amp;lt;=K的概率 那么我们有 fn,mfn,mf_{n, m} = ⎧⎩⎨⎪⎪01pnfn,...

Icefox的博客 441

多项式求逆与多项式除法/取模

多项式求逆 多项式求逆是多项式模块中的一个重要操作(“操作”这个词看出如今多项式题是多么的工业化,犹如毒瘤8操作LCT),在做生成函数/多项式除法、多项式取模/多项式多点求值中均有应用 对于一个n次多项式F(x)F(x)F(x),我们希望求出一个m-1次多项式G(x)G(x)G(x),满足F(x)G(x)≡1(modxm)F(x)G(x)\equiv 1\pmod {x^m}F(x)G(x)≡1(...

Never give in. 6613

多项式求逆,多项式取模,多项式开方 学习笔记

前言 还记得上个学期tututu跟我提过多项式的很多操作,还有一些优化常数的奇技淫巧,然而那个时候我一脸懵逼。最近几天无所事事,去洛谷做比赛又整天被吊着打,闲暇之余就想着学一下多项式的几个基本操作。 其实一开始我是想学CZT的,根据myy的论文它能把BZOJ3992那题优化到O(mlog(m)+mlog(n))O(mlog⁡(m)+mlog⁡(n))O(m\log(m)+m\log(n))。然...

KsCla 1万+

多项式取模 模板

前言: 最近想写一下多项式取模的模板,然而找不到模板题。于是上网找了个高精度除法题,写完之后才发现高精度除法和多项式取模是不一样的QAQ。前者要求不能出现负数,为此某些位置可以暂时为0,将余数拉到后面;而多项式取模则要求最高项一定要剩余0。 于是我把程序随便改了改,先扔在这儿,以后备忘。我写的是实数(FFT)的版本(其实我并不知道实数版本的多项式取模到底有什么用)。 另外我还不知道有没有写错...

KsCla 1576

多项式模2运算及求逆元

在GF(28)域上,多项式相加相减结果相同,均为异或操作 x3+x2+1 对应的二进制为 1101 用整数表示就是 13 x2+x+1 对应的二进制为 0111  用整数表示就是 7 x3+x2+1 + x2+x+1 =x3+2x2+x+2 = x3+x 等同于1101⊕0111 = 1010 用整数表示就是 10 既是 1...

weixin_34152820的博客 3196
上一篇: [Notes][多项式]杂记 · 多项式算法—多项式求逆 多项式取模 多项式开根…
下一篇: [数论 反演] HDU6053. TrickGCD
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值