YBTOJ:魔法数字(数位dp)

文章目录

  • 题目描述
  • 解析

题目描述

请添加图片描述

解析

迷惑。。。
首先,比较容易想到用二进制状态压缩记录1-9是否在十进制中出现过
然后就是整除的问题
如果记录余数,它的模数又有9个
开九维余数直接爆炸。。。
怎么办嘞?
有一个结论:

若k为p1、p2…pn的公倍数
那么(x%k)%pi=x%pi

因为k是p的质数,所以这个结论还是挺显然的
那么本题就可以找到1-9的最小公倍数(为2520)
使它作为模数最后再进行判断即可
时间复杂度:18(位数)*512(状态压缩)*2520(取模结果)*10(每次dp枚举)=232243200
还是炸

怎么办?
位数、状压、枚举基本没有优化的空间了
但我们注意到:有些数无需记录取模结果,依靠最后一位也能判断能否整除
首先可以想到5
但其实8也可以
怎么判断?
设填到倒数第二位时,数模4的结果为m
即:

x=4k+m

再填一位i后,变成:

40k+10*m+i

显然,8能整除40k,所以只需要判断10m+i能否被8整除即可
这样公倍数那一维就不必考虑5和8,降到了252
问题得到解决

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M = 3000500;
const int N = 200;
const int mod=252;
int k;
ll l,r,dp[20][515][255];//dp[pos][op][res]
int a[20];
int n;
ll mi[19];
ll find(int pos,int op,int res,int lim,int add5,int add8){//for(int i=pos;i<n;i++) printf("  ");//printf("pos=%d op=%d res=%d lim=%d add5=%d add8=%d\n",pos,op,res,lim,add5,add8);if(pos==0){int num=0;num+=add5&&op&(1<<(4));num+=add8&&op&(1<<(7));for(int i=1;i<=9;i++){if(i==5||i==8) continue;if(op&(1<<(i-1))&&res%i==0) num++;}//for(int i=pos;i<=n;i++) printf("  ");//printf("num=%d\n",num);ll ans=num>=k?1:0;return ans;}if(!lim&&dp[pos][op][res]!=-1) return dp[pos][op][res];ll ans=0;int mx= lim? a[pos] : 9;for(int i=0;i<=mx;i++){int oop=i?op|(1<<(i-1)):op;int aadd5=0,aadd8=0;if(pos==1){if(i==5||i==0) aadd5++;if(((res%4)*10+i)%8==0) aadd8++;}ans+=find(pos-1,oop,(ll)(i+res*10)%mod,lim&&i==mx,aadd5,aadd8);//for(int j=pos;j<n;j++) printf("  ");//printf("(i=%d ans=%d)\n",i,ans);}if(!lim) dp[pos][op][res]=ans;//for(int i=pos;i<n;i++) printf("  ");//printf("return %lld\n",ans);return ans;
}
//const int mod=1e9+7;ll solve(ll x){n=0;while(x){a[++n]=x%10;x/=10;}return find(n,0,0,1,0,0);
}
int main() {mi[0]=1;for(int i=1;i<=18;i++) mi[i]=mi[i-1]*10;memset(dp,-1,sizeof(dp));//	k=2;
//	int now=0,pre=0;
//	for(int i=1;i<=10500;i++){
//		now=solve(i);
//		if(now==pre+1) printf("%d\n",i);
//		pre=now;
//	}scanf("%d",&k);//printf("k=%d",k);scanf("%lld%lld",&l,&r);printf("%lld\n",solve(r)-solve(l-1));return 0;
}
/*
2 2 20
*/

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

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

相关文章

Prosjecni(构造)

Prosjecni 【题目摘要】 描述 Slavko很无聊&#xff0c;所以他把正整数填到N*N的方阵中。 如果他填出来的方阵满足以下条件&#xff0c;他会特别高兴&#xff1a; ●每行中的数字的平均值是一个位于同一行的整数。 ●每列中的数字的平均值是一个位于同一列的整数。 ●表中的所…

撒花!中文翻译仓库链接已加入 ML.NET 官方示例网站首页

从2018年12月02日决定开始做ML.NET 示例中文版https://github.com/feiyun0112/machinelearning-samples.zh-cn&#xff0c;然后以每天一篇的速度进行翻译&#xff0c;总共耗时15天&#xff0c;将现有的官方实例全部翻译成了中文&#xff0c;并提交了添加中文链接PR&#xff0c;…

P3803 【模板】多项式乘法(FFT)

P3803 【模板】多项式乘法&#xff08;FFT&#xff09; 题目描述 给定一个 n 次多项式 F(x)&#xff0c;和一个 m 次多项式 G(x)。 请求出 F(x)和 G(x)的卷积。 从低到高输出F(x)*G(x)的系数 另一种问法&#xff1a; 如果有两个无限序列a和b&#xff0c;那么它们卷积的结果是…

YBTOJ:单词频率(AC自动机)

解析 我对力量一无所知 通过这题&#xff0c;可以看出我对AC自动机还是完全没有理解 qwq 首先容易想到&#xff1a; 建一课trie树&#xff0c;然后建树时记录每个串s的终点&#xff0c;这个点后面每被经过一次&#xff0c;就相当于出现一次该单词s 但是&#xff0c;这种“出现”…

一元一次方程

一元一次方程–逆波兰栈 【题目摘要】 题目描述 SLON是一个调皮的学生&#xff0c;为了让他静下心来&#xff0c;老师给他出了一道数学题&#xff1a; 给定表达式A&#xff0c;A中含有变量x和,-,*,(,)这些符号&#xff0c;括号成对出现&#xff0c;一个算术运算符均对应两个操…

.net core上 K8S(七).netcore程序的服务发现

正文上一章我们分享了k8s的网络代理模式&#xff0c;今天我们来分享一下k8s中的服务发现。1.环境变量模式的服务发现k8s默认为我们提供了通过环境变量来实现服务发现的功能&#xff0c;前提是1.需要service在pod之前创建2.适用于同一命名空间1.1创建servicekubectl create -f n…

ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

一、前言这几年前端的发展速度就像坐上了火箭&#xff0c;各种的框架一个接一个的出现&#xff0c;需要学习的东西越来越多&#xff0c;分工也越来越细&#xff0c;作为一个 .NET Web 程序猿&#xff0c;多了解了解行业的发展&#xff0c;让自己扩展出新的技能树&#xff0c;对…

【CF1199 D,E, F】Welfare State // Matching vs Independent Set // Rectangle Painting 1

2019-08-15下午三道练习题CF1199 思路有点难想 but很好实现 这是原网站链接&#xff1a;传送门 这里只完成D, E, F三题 文章目录D&#xff1a;Welfare State题目大意正解瞅瞅代码E:Matching vs Independent Set题目大意正解代码实现F:Rectangle Painting 1题目大意正解代码实现…

YBTOJ:前缀匹配(AC自动机)

文章目录题目描述解析代码题目描述 解析 做的不错 把trie树真的当成一棵树递归即可 注意一个标记时的问题&#xff1a; void AC(){int lstrlen(s01),pl1;for(int i1;i<l;i){int aask(s0[i]);pltr[pl][a];int kpl;while(k>1){if(ok[k]) break;//注意&#xff01;ok[k]1;…

[HAOI2006]均分数据

[HAOI2006]均分数据 题解&#xff1a; 题目稍微解释一下&#xff1a; 把n个数以分为m组&#xff0c;计算每一组的和&#xff0c;求得到的这m个数的方差。由于分法是任意的&#xff0c;我们要求这些方差中的最小值 我们先用STL中的函数random_shuffle()用来对一个元素序列进行…

Docker最全教程——从理论到实战(八)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

不定方程(质数与因数)

文章目录题目描述解析代码题目描述 数据范围有误&#xff01;应该是不超过1e6 解析 容易推出&#xff1a; y&#xff08;x∗*∗n!)/(x-n!) 换元&#xff0c;令tx-n&#xff01; 则&#xff1a; yn!(n!)2/t 因为x、y都与t一一对应 所以本题就是求 (n!)2 的因数个数 我们求出n&…

Matlab快速入门

命令行窗口 clc 清屏 clear 清理变量 常用矩阵&#xff1a; x[0:2] 这是转置符号xlinspace(0,2,5) 从0到2分配5个空间xzeros(2,3)两行三列全为0的矩阵、 ones(2)2行2列全为1的方阵 eye(2)单位阵 rand(1,2)产生一行二列的随机数&#xff08;从0到1之间均匀随机数&#xff09;固…

【CF 1191】Tokitsukaze, CSL and Stone Game//Tokitsukaze and Duel//Tokitsukaze and Strange Rectangle

很难想 but很好实现 博弈论专练 传送门 惯例这里只完成D&#xff0c;E&#xff0c;F 话不多说上代码 文章目录D:Tokitsukaze, CSL and Stone Game题目大意题解代码实现E&#xff1a;Tokitsukaze and Duel题目大意题解代码实现E:Tokitsukaze and Strange Rectangle题目大意题解代…

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权&#xff0c;并配合网关实现了统一的授权异常返回值和权限配置等相关功能&#xff0c;本篇将介绍密码授权模式&#xff0c;从使用场景、源码剖析到具体实现详细讲解密码授权模式的相关应用。.netcore项目实…

YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

文章目录题目描述解析代码题目描述 解析 没有想出来 首先可以确定开关要么开一次&#xff0c;要么不动&#xff0c;其他都和这俩是等价的 一开始最先想到的就是贪心的方法&#xff0c;每个开关遍历&#xff0c;如果按下会使答案变好就按下。 但是显然当前的开闭对后面是有后效…

Tree Constructer

题目&#xff1a; 题意&#xff1a; 如果点x和y有连边&#xff0c;当且仅当a[x] or a[y] 260 - 1 &#xff08;两者是充分必要&#xff09; 现在给你边的关系&#xff0c;问你每个点的值应该是多少&#xff1f;&#xff08;给出一种情况即可&#xff09; 题解&#xff1a; …

[USACO19JAN,Platinum]Train Tracking 2

虽然是简单的dp &#xff0c;but真的太难想到了&#xff0c;而且我的码力。。。 Train Tracking 2 【题目描述】 每天特快列车都会经过农场。列车有N节车厢&#xff08;1≤N≤105&#xff09;&#xff0c;每节车厢上有一个1到109之间的正整数编号&#xff1b;不同的车厢可能会…

.netcore 堆栈调用方法小记

1|0背景上午临近午饭时&#xff0c;公司同事反馈验证码被攻击灌水。我们匆忙查询验证码明细&#xff0c;对已频繁出现的IP插入黑名单&#xff0c;但IP仍然隔断时间频繁变动&#xff0c;不得已之下只能先封禁对应公司id的验证码发送功能。年初时候&#xff0c;专门对SSO站点的发…

洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)

传送门 文章目录题目描述解析总结代码题目描述 解析 简单来说&#xff0c;就是求&#xff1a; g∑C(d,n)(d是n的约数&#xff09;mod 999911659 可以先特判一下&#xff0c;999911659|g时&#xff0c;答案为0 否则&#xff0c;可以通过欧拉定理转化为&#xff1a; g∑C(d,n)(d…