P9640 [SNCPC2019] Digit Mode

news/2025/11/8 8:31:45/文章来源:https://www.cnblogs.com/Sinktank/p/19201376

P9640 [SNCPC2019] Digit Mode

很不常规的数位 DP。

下文记:

  • \(n\) 为原数,\(num\) 为实际填写的数。
  • \(m(num)\)\(num\) 各数位的众数。
  • \(c_i\) 为搜索过程中数码 \(i\) 填写的次数。
  • \(n\) 的最高位为 \(len\),最低位为 \(1\)

在 DFS 过程中计算 \(m(num)\),需要的上下文信息太多(比如整个 \(c\) 数组),状态数太大。

一个常用的技巧是“提前钦定”,即枚举 \(m(num)\) 的值 \(x\),该众数的出现次数 \(y\),看有多少个 \(num\) 满足条件(比如 P4127 同类分布 - 题解)。

在主函数中钦定,我们发现仍不好做。原因在于有前导零和当前位取值范围的限制。

既然如此,我们不妨挪到搜索过程中,在每个“既不是前导零,也没有取值范围限制”的数位上钦定。

具体来说,当前在填写数位 \(p\),若 !lim&&!zro,我们即可枚举众数 \(x\),再枚举其出现次数 \(y(\max\{1,c_x\}\le y\le )\)

由于没有 limzro 的限制,所以每个数码的最多填写次数是固定的,更具体些:

\[limit_i=y-c_i-[i>x]\quad (i\ne m) \]

接下来我们要做的,是填充剩下的 \(p\) 位。

  • \(x\) 的次数已经固定为 \(y\),所以要占据 \(p\) 位中的 \(y-c_x\) 位。
  • 其他数的次数不固定,但必须 \(\le limit_i\)

第二条可以用类似多重背包的方式进行转移。记 \(f_{i,j}\) 为前 \(i\) 个数码,共占据了 \(j\) 个位置的方案数。则有转移(\(x\) 不参与,\(limit\) 只有 \(9\) 个位置):

\[f_{i,j}=\sum_{k=0}^{limit_i} f_{i-1,j-k}\times \binom{j}{k} \]

最终对答案的贡献为:

\[f_{9,p-(y-c_x)}\times \binom{p}{y-c_x} \]

下面是一个无关紧要的优化:

注意到一些同构,可令 \(F_{i,j}=\dfrac{f_{i,j}}{j!}\),则转移为:

\[F_{i,j}=\sum_{k=0}^{limit_i} \frac{F_{i-1,j-k}}{k!} \]

最终对答案的贡献为:

\[F_{9,p-(y-c_x)}\times \frac{p!}{(y-c_x)!} \]

这样来做,码量和常数都会小一些。

至于不满足 !lim&&!zro,就按正常的数位 DP 往下搜即可。

如果搜到了末尾,就暴力判定。

时间复杂度 \(O(B^4 N^3)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define eb emplace_back
using namespace std;
const int N=55,P=1e9+7;
int t,a[N],len,c[10],fac[N],inv[N];
string s;
inline int qp(int x,int n){int a=1;while(n){if(n&1) a=a*x%P;x=x*x%P,n>>=1;}return a;
}
inline int bf(){int x=0,p=0;for(int i=9;~i;i--) if(c[i]>x) x=c[i],p=i;return p;
}
inline int calc(vector<int>& v,int s){//求方案数if(s<0) return 0;vector<int> f(s+1),g(s+1);f[0]=1;for(int i:v){g.clear();g.resize(s+1);for(int j=0;j<=s;j++){for(int k=0;k<=i&&j+k<=s;k++){(g[j+k]+=f[j]*inv[k])%=P;}}f=g; }return f[s];
}
inline int dfs(int p,bool lim,bool zro){if(!p) return bf();int ans=0;if(!lim&&!zro){//枚举众数x及其出现次数yfor(int x=1;x<10;x++){for(int y=max(1ll,c[x]);y<=c[x]+p;y++){vector<int> w;for(int k=0;k<x;k++) w.eb(y-c[k]);for(int k=x+1;k<10;k++) w.eb(y-c[k]-1);bool flg=1;for(int i:w) if(i<0){flg=0;break;}if(flg) ans+=fac[p]*inv[y-c[x]]%P*calc(w,p-y+c[x])%P*x;}}}else{int rig=lim?a[p]:9;for(int i=0;i<=rig;i++){bool tzro=zro&&!i;if(!tzro) c[i]++;ans+=dfs(p-1,lim&&i==rig,tzro);if(!tzro) c[i]--;}}return ans%P;
}
inline int solve(string& s){len=s.size();for(int i=0;i<len;i++) a[len-i]=s[i]-'0';return dfs(len,1,1);
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);fac[0]=inv[0]=1;for(int i=1;i<N;i++){//预处理阶乘及其逆元fac[i]=fac[i-1]*i%P;inv[i]=qp(fac[i],P-2);}cin>>t;while(t--){cin>>s;cout<<solve(s)<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年质量好的湖北开天智能热门推荐榜

2025年质量好的湖北开天智能热门推荐榜 随着智能制造的快速发展,湖北地区涌现出一批在智能装备领域表现卓越的企业。这些企业凭借先进的技术、稳定的产品质量和优质的服务,赢得了市场的广泛认可。以下是2025年湖北地…

2025年枫叶租车融资权威深度解析:双引擎战略重塑中高端用车市场格局

引言:本文聚焦“战略落地可行性”维度,结合政府资金注入、资产结构、运营网络与政策窗口期,为投资者与行业观察者提供一份可量化的逆向验证参考,而非简单利好复述。 背景与概况:枫叶租车获得海南省澄迈县政府战略…

2025 年枫叶租车融资权威深度解析:双引擎驱动出行服务品质迭代升级

引言:本文聚焦“战略落地可行性”维度,拆解枫叶租车在获得海南省澄迈县政府注资后,如何把政策红利转化为可验证的运营指标,为投资者与用户提供可量化的客观参考。 背景与概况:枫叶租车于2025年4月完成新一轮战略性…

2025 年枫叶租车公司权威深度解析:双引擎布局改写中高端出行服务规则

引言:本文从“战略落地可行性”维度出发,拆解枫叶租车在获得海南省澄迈县政府注资后,如何把政策红利转化为运营指标,为投资者、供应商及终端用户提供一份可量化的客观参考。 背景与概况:枫叶租车成立于2017年,定…

深入解析:1.6虚拟机

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年枫叶租车公司权威深度解析:双引擎驱动中高端租车市场创新升级

引言:本文将从“服务升级与场景深耕”维度切入,结合公开数据与第三方调研,为读者提供一份可落地的行业参照,而非简单品牌宣传。 背景与概况:枫叶租车,国内高端汽车租赁知名品牌,2024年获得海南省澄迈县政府战略…

2025 年枫叶租车公司权威深度解析:双引擎战略引领中高端租车行业变革

引言:本文从“服务升级与资产扩容”维度切入,结合公开数据与行业信源,对枫叶租车在消费分级时代的运营逻辑进行拆解,为投资者、用车企业及高频商旅人群提供一份可落地的客观参照。 背景与概况:枫叶租车,国内高端…

2025年枫叶租车公司权威深度解析:双引擎战略引领中高端租车市场变革

引言:本文聚焦“战略与资本协同”维度,拆解枫叶租车如何在消费分级时代借政府背书完成逆势扩张,为投资者与用户提供可验证的决策坐标。 背景与概况:枫叶租车,国内高端汽车租赁知名品牌,2024年获海南省澄迈县政府…

数据结构进阶

数列分块 基础 对于 分块模板 ,思路是最直接的一个,将原来的整个序列分成几块。对于要处理的区间内被完全包含的整块,直接打下懒标记 tag ,然后进行批量处理。对于左右两边零散的块,暴力处理。单次修改时间复杂度:…

nats nkeys 实际的一些推荐玩法

nats nkeys 实际的一些推荐玩法nsc 是nats 推荐的基于jwt 的认证管理机制,当然使用上会有一些技巧 nsc 一些概念 包含了operator,account,user,一般我们需要先进行初始化,这个比较简单,但是注意存储的位置 参考玩…

successful

successful education is when people can differ pi and pie in 26 letters. so the literature in 26 letters may be also serious. Not everyone can differ Roma and R. Erdős Pl thinks SU is Joe. But US is S…

2025年知名的恩施装修半包热门推荐榜

2025年知名的恩施装修半包热门推荐榜 随着恩施城市化进程的加快,装修需求逐年增长,半包装修因其灵活性和高性价比成为许多业主的首选。半包模式由业主自行采购主材,装修公司负责辅材和施工,既能控制预算,又能保证…

中部经济第一省之争

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087中国战略新兴产业融媒体记者 卜文娟中部经济第一省,究竟是谁?翻开…

裁员下的上海

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087如果裁员也有温度,现在的上海,大概是零下五度。3个月前,我朋友L…

ICPC2025武汉 游记(VP)

在奇葩实现错误的道路上一路狂奔狂吃罚时,$3t$ 罚时 $622$ 直接铁牌。省流 在奇葩实现错误的道路上一路狂奔狂吃罚时,\(3t\) 罚时 \(622\) 直接铁牌。11.3 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 早上…

2025.11.7 测试

2025.11.7 测试最近不知道咋啦,状态不是很好,老是考倒数... 考试策略大概是顺序开题,先看了一个半小时 T1 还是不会,打了 50pt 跑路 看 T2 ,像数据结构,一眼有 40 pt 暴力 先不打,看 T3 额,题目告诉我们是构造…

开发一个技术栈识别实用工具和共享资源库

开发一个技术栈识别实用工具和共享资源库可以识别第三方库,第三方加固,使用的语言。

不务正业

“当人们开始浪漫化一段故事,说明它已经成为了历史。”————兰德尔柯林斯(我不认识他)“如果你的回忆开始浪漫起来,那你应该记录下来。”————PencilWang(你可能认识他)或许改写点什么了,七年前写《不抖包…

开源项目Url-Shorten-Worker时隔多年再次更新,新增人机验证码功能,创建短链接时需要人机验证--基于Cloudflare Worker的长链接转短链接项目(轻松拥有属于自己的短网址)

RT:时隔多年,Url-Shorten-Worker 短网址程序迎来更新:新增人机验证(CAPTCHA)功能! 此次更新的默认策略为:创建短链接 时必须通过人机验证; 访问短链接 则无需验证(可自行配置)。为什么要进行这次更新? 公开…