首页 > 其他分享 >P6754 [BalticOI 2013 Day1] Palindrome-Free Numbers

P6754 [BalticOI 2013 Day1] Palindrome-Free Numbers

时间:2024-07-02 09:54:16浏览次数:16  
标签:Palindrome 20 cur int ll Free Day1 dp 回文

数据范围一眼数位dp。

关键条件为如果一个数字串的一个长度大于 11 的子串也为回文串的话,那么我们也定义这个数字串为回文串。

仔细思考发现一旦两个连续的数相同(偶回文)或两个数隔一个数相同(奇回文)都是回文,所以要保证连续三个数不相同,记录前两位即可。

注意事项:

1.前导零不应为0,防止前导零影响结果,可设为-1。

2.因为前两位可能有前导零,记忆化搜索可能越界,应搜索和记录时数值+1。

3.0<=l,所以有可能将出现求负数,应特判。(提示我们数位dp的一种可能错误)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a,b,dp[20][20][20];
int sh[20];
ll dfs(int cur,bool qdl,bool lim,int x2,int x1)
{
	if(cur==0)return 1;
	if(!qdl&&!lim&&~dp[cur][x2+1][x1+1])return dp[cur][x2+1][x1+1];
	int z=lim?sh[cur]:9;
	ll sum=0;
	for(int i=0;i<=z;i++)
	{
		if(x2==i||x1==i)continue;
		sum+=dfs(cur-1,qdl&(i==0),lim&(i==z),x1,(!qdl||i)?i:-1);
	}	
	if(!qdl&&!lim)dp[cur][x2+1][x1+1]=sum;
	return sum;
}
ll find(ll x)
{
	if(x<0)return 0;
	ll ans=0;int pos=0;
	while(x>0)
	{
		sh[++pos]=x%10;
		x/=10;
	}	
	ans=dfs(pos,1,1,-1,-1);
	return ans;
}
int main()
{
	memset(dp,-1,sizeof(dp));
	scanf("%lld%lld",&a,&b);
	printf("%lld\n",find(b)-find(a-1));
	return 0;
} 

标签:Palindrome,20,cur,int,ll,Free,Day1,dp,回文
From: https://www.cnblogs.com/storms11/p/18279325

相关文章

  • Oracle day15
    /*createtablef0307(idnumber,productnamevarchar2(100),parentidnumber);insertintof0307values(1,'汽车',null);insertintof0307values(2,'车身',1);insertintof0307values(3,'发动机',1);insertintof0307values(4......
  • Oracle day14
    /*createtablef0810(idnumber,timesvarchar2(50));insertintof0810values(1,'2019-12-2511:01');insertintof0810values(2,'2019-12-2511:03');insertintof0810values(3,'2019-12-2511:05');insertintof0810values(4,......
  • day13 Goroutine 协程
    了解计算机原理进程:计算机资源分配单位线程:cpu处理单位协程:以特殊机制或者函数实现高并发,又称轻量级线程了解GoroutineGoGoroutine,go语言中的协程,实现并发。关键字go初始大小4k,随着程序执行自动增长和删除实现多线程并发执行packagemainimport"fmt"fu......
  • 游戏冻结工具 -- 雪藏HsFreezer v1.78
    软件简介HsFreezer是一款多功能游戏冻结工具,它允许用户随意暂停和继续游戏,同时具备系统优化和进程管理的功能。这款软件特别适合希望在游戏加载时间节省或在游戏与其他任务之间快速切换的用户。其主要特点包括快捷键操作、单锁模式的丝滑切换,以及丰富的系统优化功能。此外,HsF......
  • FreeRTOS静态创建任务分析
    #defineconfigSUPPORT_STATIC_ALLOCATION        1  设置了静态创建任务需要重新定义这2个函数,由程序员进行分配任务空间(空闲任务)(定时任务)在调度器里被使用这2个函数空闲任务定时任务定义空闲分配空间函数和定时分配空间函数静态创建任务内部......
  • FreeBSD系统设置启动环境变量文件涉及.cshrc、.login_conf等
    问题提出:图形界面英文怎么配成中文?FreeBSD启动后发现有时候进入xfce是中文系统,有时候是英文系统。其实是有两套图形登录系统,因此尝试在那套英文系统里设置环境变量,目标是1显示中文2能输入中文。在解决问题中,尝试设置环境变量。问题解决:设置启动环境变量首先看两套图形登......
  • 计算机二级python复习日记DAY1
    试卷内容及成绩分布选择和编程题选择:选择题期间只允许鼠标左键操作,全部提交完毕后进入操作题模式,键盘才会自动解锁(注意:选择题只能进入一次,还有一定要保证选择题要有20分以上,总分超过60分才能有证书)10分的公共基础题,内容较为庞杂,只需要在做真题的时候积累一下就行30分的pyt......
  • springboot使用itextpdf+jfreechart制作PDF文档
    1.springboot引入的依赖组件项目中需要引入itextpdf和jfreechart两个组件,版本根据项目所需进行引入,maven组件版本查询可根据如下地址进行查询:maven组件查询<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><vers......
  • 【FreeRTOS】两个Delay函数
    目录0前言1Delay函数1.1两个Delay函数1.2总结2程序2.1函数修改2.2总结0前言在我们实际开发过程中,一般都用事件开发不要使用死循环1Delay函数1.1两个Delay函数FreeRTOS中有两个Delay函数:vTaskDelay:至少等待指定个数的TickInterrupt才能变为就绪......
  • Day11 —— 大数据技术之Spark
    Spark快速入门系列Spark的概述什么是Spark?Spark的主要特点Spark的主要组件Spark安装Spark三种运行模式SparkStandalone架构SparkStandalone的两种提交方式SparkOnYARN架构RDD算子转化算子行动算子SparkRDDRDD的创建从对象集合创建RDD从外部存储创建RDDSparkS......