[题解]P14094 [ICPC 2023 Seoul R] Special Numbers

news/2025/11/5 21:38:57/文章来源:https://www.cnblogs.com/Sinktank/p/19194656

P14094 [ICPC 2023 Seoul R] Special Numbers

数位 DP。

考虑使用 \(f[pos][g]\) 记忆化,其中:

  • \(pos\) 表示当前填到第几位。
  • \(g\) 表示填过位置的乘积与 \(k\)\(\gcd\)

根据这个表格我们知道,\(10^{17}\) 内的因数最多的数[1]只有不到 \(65536\) 个因数。所以 \(g\) 的取值不超过 \(65536\) 种,将第二维离散化一下就可以了。

代码中,第二位是用哈希表(gp_hash_table)现用现算的,常数不小,但是目前谷上最优解。

点击查看代码
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#define int long long
using namespace std;
using namespace __gnu_pbds;
const int N=25,P=1e9+7;
int k,len,a[N],f[N][65536],idx;
string l,r;
gp_hash_table<int,int> ma;
inline int gcd(__int128 a,int b){int r=a%b;while(r) a=b,b=r,r=a%b;return b;
}
inline int dfs(int p,__int128 fc,bool zro,bool lim){int g=gcd(fc,k),gg;if(!p) return g==k;if(ma.find(g)==ma.end()) ma[g]=gg=idx++;else gg=ma[g];if(!zro&&!lim&&(~f[p][gg])) return f[p][gg];int rig=lim?a[p]:9,ans=0;for(int i=0;i<=rig;i++){bool tzro=zro&&!i;ans+=dfs(p-1,tzro?1:fc*i,tzro,lim&&i==rig);}ans%=P;if(!zro&&!lim) f[p][gg]=ans;return ans;
}
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,1);
}
inline bool check(string& s){int f=1;for(int i:s) if(!((f*=i-'0')%=k)) return 1;return 0;
}
signed main(){memset(f,-1,sizeof f);cin>>k>>l>>r;cout<<(solve(r)-solve(l)+check(l)+P)%P<<"\n";//字符串-1不好做,左端点单独处理(其实int128就可以)return 0;
}

另一种做法是考虑到 \(k\) 若有某个超过 \(10\) 的质因数,则一定无解。因此只需要用质因子 \(2,3,5,7\) 的指数进行记忆化即可。


  1. 即 Highly Composite Numbers,表格数据来源。 ↩︎

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

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

相关文章

ASP.NET Core Blazor 核心功能三:Blazor与JavaScript互操作——让Web开发更灵活

嗨,大家好!我是码农刚子。今天我们来聊聊Blazor中C#与JavaScript互操作。我知道很多同学在听到"Blazor"和"JavaScript"要一起工作时会有点懵,但别担心,我会用最简单的方式带你掌握这个技能! …

测试思维的培养

一、作为一个测试人员养成一个测试思维: 当被测物体给到你,你就会从哪些角度去考虑 (1)需求测试:(全称:软件需求规格说明书,文档) 测试需求错别字、合理、冗余、规范、唯一性、 (2)界面测试:(也叫ui测试) …

NOIP2025模拟2 改题记录

HZOJ 写在前面 CSP后第一场。回归CSP前的手感,就是啥也不会。今年第一场4.5h的模拟赛,确实没有4h时间紧张了,还有大把时间犯困,可能是CSP破防了摆烂了吧。今天提前出成绩了,大概就是挂如分了,估计得卡着七钩线。…

10-16

(1)今天预习了动态规划 (2)今天学习了web (2)明天继续深造

ASP.NET Core Blazor 核心功能二:Blazor与JavaScript互操作——让Web开发更灵活

嗨,大家好!我是码农刚子。今天我们来聊聊Blazor中C#与JavaScript互操作。我知道很多同学在听到"Blazor"和"JavaScript"要一起工作时会有点懵,但别担心,我会用最简单的方式带你掌握这个技能! …

10-15

(1)今天预习了java的课程 (2)明天继续深造

10-14

(1)今天预习了java的课程 (2)明天继续深造

模拟赛 32

没打。USS Enrerprise(CVN-80) 什么时候服役我什么时候补。

top 命令的load average和vmstat 的r列和b列的关系是什么?区别又是什么?

最近在复习linux系统负载问题排查,主要涉及到cpu,内存,io,网络等指标的一些习惯的linux命令,发现top命令的load average指标和vmstat指标的r列以及b列似乎有些联系,但是又搞不懂具体是什么关系,又有什么区别,于是…

高级程序语言设计第4次作业

这个作业属于:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/14577 学号:102500416 姓名:王浩宇 第一项 运行以下代码12第二项老师布置的题目1d…

11/5

补课恢复了,三个家长找我补课,我现在真是爆炸有钱,然后再备考六级

网页打包EXE/APK/IPA出现乱码时怎么回事?

最近有几个朋友在把网页项目打包成 EXE(电脑程序)、网页打包APK(安卓应用) 或 网页打包IPA(苹果应用) 软件时,会遇到一个恼人的问题: 页面出现乱码, 原本在浏览器中一切正常,文字清晰可读,但一打包成应用,界面上的…

Ai元人文:个人阐述疏漏声明与系统性术语修正说明

Ai元人文:个人阐述疏漏声明与系统性术语修正说明 在“AI元人文”理论体系的构建与演进过程中,我的认知亦在不断深化。我意识到,过往在多篇文章中使用的、以“博弈”为核心的一组关键术语,其表述未能精准传达理论的…

基于AWS构建的微服务集群的最佳实践

在AWS上部署微服务集群时,限流、熔断、降级的最佳实践以AWS托管服务为核心,结合开源组件分层实现——既利用AWS的高可用性和托管优势减少运维成本,又通过标准化开源工具保证灵活性,同时遵循“边缘防护+服务内防护”…

六校联考 20251105C. 物品采购(judge)

为什么写这个题解呢,因为感觉真的很久都没有写过这种屎长代码了。 \(type=1\) 手画不难发现,如果一个序列有 \(\le 2\) 个颜色段,那么它的贡献是 \(0\),因为任意一个子序列都会是子段。 否则贡献是 \(n-2\),因为可…