当前位置: 首页 > news >正文

CF95D Horse Races

数位 dp 板子。为啥是紫?为啥是紫?为啥是紫?

记录上一个幸运数字距离多少,是否达到上界,多测只能记忆化剩下 \(len\) 位且未达到上界的情况。剩下的就是分讨。

\(calc(r)-calc(l-1)\)\(l-1\) 很麻烦,学习题解的直接 \(O(len)\) \(check\) 一下 \(l\) 变为 \(calc(r)-calc(l)+check(l)\) 即可。

Takanashi Rikka
// Problem: CF95D Horse Races
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF95D
// Memory Limit: 250 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define fr(x) fin(x),fout(x);
#define Fr(x,y) fin(x),fout(y)
#define INPUT(_1,_2,FILE,...) FILE
#define IO(...) INPUT(__VA_ARGS__,Fr,fr)(__VA_ARGS__)
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define intz(x,z) memset((x),(z),sizeof((x)))
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
inline ll lowbit(ll x){return x&-x;}
#define fi first
#define se second
inline void cmx(auto &x,ll y){if(y>x)x=y;}
inline void cmn(auto &x,ll y){if(y<x)x=y;}
const int N=1005,mod=1e9+7;
int k,w[N][N];ll pw[N],sum[N];
char l[N],r[N];
int dfs(char *s,int len,int u,int p,bool f){if(u==len+1)return 0;int t=(p==-1?0:p);if(f&&w[len-u][t]!=-1)return w[len-u][t];ll res=0;int mx=(f?9:s[u]-'0');if(p!=-1&&p<=k){if(mx>=7)(res+=((f|(mx>7))?pw[len-u]:sum[u+1]+1))%=mod;if(mx>=4)(res+=((f|(mx>4))?pw[len-u]:sum[u+1]+1))%=mod;}else{if(mx>=7)(res+=dfs(s,len,u+1,1,f|(mx>7)))%=mod;if(mx>=4)(res+=dfs(s,len,u+1,1,f|(mx>4)))%=mod;}(res+=1ll*(mx-(mx-1>=7)-(mx-1>=4))*dfs(s,len,u+1,(p==-1?-1:p+1),1))%=mod;if(mx!=4&&mx!=7)(res+=dfs(s,len,u+1,(p==-1?-1:p+1),f))%=mod;if(f)w[len-u][t]=res;return res;
}
bool check(char *s,int len){int p=0;for(int i=1;i<=len;i++)if(s[i]=='4'||s[i]=='7'){if(p&&i-p<=k)return 1;p=i;}return 0;
}
void UesugiErii(){cin>>(l+1)>>(r+1);int L=strlen(l+1),R=strlen(r+1);intz(sum,0);for(int i=L;i;i--)sum[i]=(sum[i+1]+pw[L-i]*(l[i]-'0')%mod)%mod;ll ans=(mod-dfs(l,L,1,-1,0))%mod;intz(sum,0);for(int i=R;i;i--)sum[i]=(sum[i+1]+pw[R-i]*(r[i]-'0')%mod)%mod;ans=(ans+dfs(r,R,1,-1,0))%mod;cout<<(ans+check(l,L))%mod<<'\n';
}
signed main(){cfast;intz(w,-1);for(int i=pw[0]=1;i<=1000;i++)pw[i]=pw[i-1]*10%mod;int _=1;cin>>_>>k;for(;_;_--)UesugiErii();return 0;
}
http://www.jsqmd.com/news/120134/

相关文章:

  • 程序员必备技能:AI Agent 9种设计模式深度解析,提升大模型应用效能(值得收藏)
  • 扩展域并查集(种类并查集)
  • 算法分析--基数排序
  • 【题解】P14826 踩踩标
  • 2025-12-21
  • 港媒盛赞“香港媳妇”徐冬冬!婚照惊艳全网,港圈作品圈粉无数
  • 2025 国内公关公司 TOP10 评测!策略创新+资源整合,十大品牌权威榜单发布,专业赋能品牌传播新生态 - 全局中转站
  • 基于librosa的MFCC的音色相似度检测程序
  • Flutter官方拒绝适配鸿蒙的真相:不是技术问题,而是...
  • 【Java-JMM】Happens-before原则
  • 请教软件和业务问题,引发的思考
  • Docker容器总结 - 十里
  • 基础模型向通用智能
  • 我天,Java 已沦为老四。。
  • 写在最前面
  • Java毕设选题推荐:基于springboot的汽车租赁买卖管理系统的设计与实现汽车知识科普,租赁管理,热门汽车推荐【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2004-基于多目标粒子群(MOPSO)算法的多阈值图像分割(Otsu 法 + 最小交叉熵)(中文核心、SCI 四区可选)
  • .net 8使用autofac以及.net core自带的注入
  • 完整教程:零基础入门C语言之C语言实现数据结构之单链表
  • Hive 3.x 建表指定分桶,但load data后失效的原因
  • GSoC 成果公布!印度开发者为 DolphinScheduler 引入通用 OIDC 认证,实现无缝安全访问
  • 【python大数据毕设实战】哮喘患者症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
  • 【01-02】
  • 【开题答辩全过程】以 基于微信小程序的糖尿病居家健康管理实用的系统为例,包含答辩的问题和答案
  • Qt 源码阅读随笔
  • 2025 我用 Sysinternals 打通 Windows 排障“证据链”:开机慢 / 安装失败 / 磁盘暴涨(三个真实案例复盘)
  • 基于java的SpringBoot/SSM+Vue+uniapp的宠物综合服务平台的详细设计和实现(源码+lw+部署文档+讲解等)
  • [20251219]测试sql语句子光标的执行性能2(21c).txt
  • 面向轻量级智能体的模型蒸馏方法研究-大规模预训练模型知识迁移机制分析
  • 非遗万象图前端开发