首页 > 其他分享 >【XSY4186】Binomial(结论,数位DP)

【XSY4186】Binomial(结论,数位DP)

时间:2022-10-31 07:55:35浏览次数:80  
标签:lfloor right XSY4186 dfrac bmod rfloor Binomial DP left

题面

Binomial

题解

设 \(\operatorname{ord}(n)\) 表示 \(n\) 分解质因数后 \(p\) 的幂次,那么我们就是对于每一个 \(k\) 要求有多少 \(0\leq m\leq n\) 使得 \(\operatorname{ord}\left(C_n^m\right)= k\)。

首先有一个很显然的式子:\(\operatorname{ord}(n!)=\sum\limits_{k=1}^{\infty}\left\lfloor\dfrac{n}{p^k}\right\rfloor\),于是:

\[\operatorname{ord}(C_n^m)=\operatorname{ord}\left(\dfrac{n!}{m!(n-m)!}\right)=\sum_{k=1}^{\infty}\left(\left\lfloor\dfrac{n}{p^k}\right\rfloor-\left\lfloor\dfrac{m}{p^k}\right\rfloor-\left\lfloor\dfrac{n-m}{p^k}\right\rfloor\right) \]

考虑把 \(n,m,n-m\) 都用 \(p\) 进制表示:

在这里插入图片描述

此时 \(\left\lfloor\dfrac{n}{p^k}\right\rfloor\) 就相当于 \(n\) 右移 \(k\) 位,于是我们把第 \(k\) 位这一条分界线画出来,那么 \(n\) 在分界线左边的部分就相当于 \(\left\lfloor\dfrac{n}{p^k}\right\rfloor\),\(n\) 在分界线右边的部分就相当于 \(n\bmod p^k\)。\(\left\lfloor\dfrac{m}{p^k}\right\rfloor,\left\lfloor\dfrac{n-m}{p^k}\right\rfloor\) 同理。

如果你把这看作一个减法竖式的话(即 \(n-m\),当然看成加法竖式 \(m+(n-m)\) 也是可以的),就会发现:若减法过程中分界线右边没有向分界线左边借位(\(n \bmod p^k\geq m\bmod p^k\)),那么就有 \(\left\lfloor\dfrac{n}{p^k}\right\rfloor-\left\lfloor\dfrac{m}{p^k}\right\rfloor=\left\lfloor\dfrac{n-m}{p^k}\right\rfloor\);若减法过程中分界线右边有向分界线左边借位(\(n \bmod p^k< m\bmod p^k\)),那么就有 \(\left(\left\lfloor\dfrac{n}{p^k}\right\rfloor-1\right)-\left\lfloor\dfrac{m}{p^k}\right\rfloor=\left\lfloor\dfrac{n-m}{p^k}\right\rfloor\)。

于是就可以写成:

\[\operatorname{ord}(C_n^m)=\sum_{k=1}^{\infty}\left[m\bmod p^k>n\bmod p^k\right] \]

于是就可以数位 DP 了:设 \(f(k,\operatorname{ord},0/1)\) 表示考虑完 \(m\) 的末 \(k\) 位,\(\sum_{k'=1}^{k}\left[m\bmod p^{k'}>n\bmod p^{k'}\right]\) 为 \(\operatorname{ord}\),其中是否满足 \(\left[m\bmod p^{k}>n\bmod p^{k}\right]\) 的 \(m\) 的个数。直接转移即可。

这里和平常不同,是从低位往高位 DP 的,那如果最后 \(m>n\) 怎么办呢?你发现我们刚好记录了 \(0/1\) 表示是否满足 \(\left[m\bmod p^{k}>n\bmod p^{k}\right]\),那么最后 \(f(|n|,*,0)\) 就是我们要的答案了。

代码如下:

#include<bits/stdc++.h>

#define N 4010
#define ll long long

using namespace std;

namespace modular
{
	const int mod=998244353;
	inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
	inline int dec(int x,int y){return x-y<0?x-y+mod:x-y;}
	inline int mul(int x,int y){return 1ll*x*y%mod;}
}using namespace modular;

inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^'0');
		ch=getchar();
	}
	return x*f;
}

struct BigInt
{
	int len,a[N];
}n,nn;

int p,K;
char s[N];

void turnp()
{
	while(n.len)
	{
		ll r=0;
		for(int i=n.len;i>=1;i--)
		{
			r=10ll*r+n.a[i];
			n.a[i]=r/p;
			r%=p;
		}
		while(n.len&&!n.a[n.len]) n.len--;
		nn.a[++nn.len]=r;
	}
	n=nn;
}

int f[N][N][2];
int ans[N];

int main()
{
//	freopen("binom2.in","r",stdin);
//	freopen("binom2.out","w",stdout);
	p=read(),K=read();
	scanf("%s",s+1);
	n.len=strlen(s+1);
	for(int i=1;i<=n.len;i++) n.a[i]=s[n.len-i+1]-'0';
	turnp();
	f[0][0][0]=1;
	for(int k=1;k<=n.len;k++)
	{
		for(int j=0;j<=n.len;j++)
		{
			f[k][j][0]=add(mul(n.a[k]+1,f[k-1][j][0]),mul(n.a[k],f[k-1][j][1]));
			f[k][j+1][1]=add(mul(p-n.a[k]-1,f[k-1][j][0]),mul(p-n.a[k],f[k-1][j][1]));
		}
	}
	for(int i=n.len;i>=0;i--)
		ans[i]=add(f[n.len][i][0],ans[i+1]);
	for(int i=0;i<=K;i++)
		printf("%d ",ans[i]);
	return 0;
}

标签:lfloor,right,XSY4186,dfrac,bmod,rfloor,Binomial,DP,left
From: https://www.cnblogs.com/ez-lcw/p/16842978.html

相关文章

  • 【XSY4180】串串游走(AC自动机,期望DP,高斯消元)
    假瑞出搬的神仙题。原题CFgym103119B。先把\(T\)去重。考虑先用\(O(nm\logk)\)建出所有串的AC自动机。注意建AC自动机的时候,为了保证空间,假设当前点\(u\)没......
  • 【XSY3997】方格计数(容斥,dp)
    题面方格计数题解拼命容斥即可。先考虑\(k=0\)的情况。首先先对对角线的限制容斥,即用“没有限制-正对角线没选-反对角线没选+正反对角线都没选”。设\(Z\)中对角......
  • 【XSY3990】Alice 和 Bob 双在玩游戏(博弈,dp,拓扑,背包)
    题面Alice和Bob双在玩游戏题解注意到这里一个人无法操作后,另一个人也不一定无法操作(即不像普通的取石子游戏一样),所以考虑转化一下他们各自的最优策略:双方都想让自己......
  • 【XSY3972】树与图(树形dp,树剖,分治NTT)
    题面树与图题解不难发现本题可以转化成以下题目:给定一个\(n\)个点的有根树,你可以在树上选择\(k\)个点,满足对于任意两个点都不互为祖先关系,且从根到每个叶子的路......
  • wordpress独立网站域名解析教程
    网站想要能够访问的第一步就是,把域名解析到我们的服务器IP,这里以阿里云购买的域名举例登阿里云后台找到所有的域名列表   解析域名点击【解析-添加记录】,记......
  • wordpress外贸跨境电商独立站WooCommerce插件安装教程
    如果想要搭建一个外贸独立站,可以使用wordpress配合WooCommerce插件实现电商功能下载插件这里可以去下面地址下载https://woo.weixiaoduo.com/download安装插件网站后......
  • 【XSY3898】强度(期望dp)
    题面强度题解首先题目的要求肯定要转化。有多种转化方法,例如:(其中\(s_i\)代表以\(i\)为根节点的子树大小)\[\begin{aligned}\Epsilon(w(T))=&\Epsilon\left(\sum_{......
  • 【XSY3896】相似(dp套dp,状压)
    题面相似题解可以发现,\(S\)和\(T\)相似,等价于它们的最长公共子序列长度至少为\(n-k\)。首先考虑如何求出两个字符串的\(\text{LCS}\)(最长公共子序列)。考虑dp:......
  • 【XSY3892】【hihocoder1147】时空阵(分层图dp)
    设\(dp(i,t,l)\)表示已经定好前\(i\)层,共有\(t\)个节点,其中第\(i\)层有\(l\)个节点。直接转移即可,注意一些细节:第\(1\)层只有\(1\)号节点。同层之间......
  • wordpress编辑器增加粘贴图片上传服务器教程
    默认的编辑器没有粘贴上传图片功能,现在我们来增加一下安装插件网站后台,找到安装插件界面【插件-安装插件-搜索】 ThePaste  测试插件发布文章的时候,直接使用qq......