Apocalypse Someday (POJ - 3208,数位 DP)

MCAL配置之CAN模块及源码分析 该文章详细解析了Autosar中MCAL配置里的CAN模块,详细分析了重要的配置选项,并对CAN的发送和接收函数进行了剖析。 阅读详情

一.题目链接:

POJ-3208

二.题目大意:

定义魔鬼数为含有连续 666 的数.

求第 k 大的魔鬼数.

三.分析:

很明显用填坑法解数位 DP.

假设当前枚举到数字的第 i 位且第 i 位为 j ,那我们需要知道小于等于当前枚举的数的魔鬼数有多少个.

显然需要预处理出 f[i][j].

f[i][0]: 不超过 i 位数且从第 i 位开始有 0 个连续的 6 的非魔鬼数的数的个数.

f[i][1]: 不超过 i 位数且从第 i 位开始有 1 个连续的 6 的非魔鬼数的数的个数.

f[i][2]: 不超过 i 位数且从第 i 位开始有 2 个连续的 6 的非魔鬼数的数的个数.

f[i][3]: 不超过 i 位数的魔鬼数的数的个数.

易得状态转移方程为:

f[i][0] = (f[i - 1][0] + f[i - 1][1] + f[i - 1][2]) * 9

f[i][1] = f[i - 1][0]

f[i][2] = f[i -1][1]

f[i][3] = f[i - 1][2] + f[i - 1][3] * 10

详见代码.

四.代码实现:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;

ll f[25][4];

void init()
{
    f[0][0] = 1;
    for(int i = 1; i <= 20; ++i)
    {
        f[i][0] = (f[i - 1][0] + f[i - 1][1] + f[i - 1][2]) * 9;
        f[i][1] = f[i - 1][0];
        f[i][2] = f[i - 1][1];
        f[i][3] = f[i - 1][2] + f[i - 1][3] * 10;
    }
}

int main()
{
    init();
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n, m;
        scanf("%d", &n);
        for(m = 1; f[m][3] < n; ++m);
        for(int i = m, k = 0; i >= 1; --i)
        {
            for(int j = 0; j <= 9; ++j)
            {
                ll cnt = f[i - 1][3];
                if(j == 6 || k == 3)
                {
                    for(int l = max(0, 3 - k - (j == 6)); l < 3; ++l)
                    {
                        cnt += f[i - 1][l];
                    }
                }
                if(cnt < n) n -= cnt;
                else
                {
                    if(k < 3)
                    {
                        if(j == 6)  ++k;
                        else        k = 0;
                    }
                    printf("%d", j);
                    break;
                }
            }
        }
        printf("\n");
    }
    return 0;
}

 

机器人常用坐标系详解:原理、获取方法及实战实例 本文系统阐述了机器人四大核心坐标系(世界、基、工具、工件)的原理与标定方法。世界坐标系提供全局参考基准,基坐标系绑定机器人本体,工具坐标系定义末端执行器位置,工件坐标系则锁定作业对象位置。通过齐次变换矩阵实现各坐标系间的关联转换。重点介绍了三类标定技术:手动设定法(世界坐标系)、三点/六点法(工具TCP标定)和视觉识别法(工件标定),并以工业机械臂上下料为例演示了完整应用流程。随着技术发展,自动化标定、动态坐标系等新趋势将进一步提升机器人作业精度与效率。 阅读详情

相关推荐

告别重复劳动:用Python+pywinauto打造你的微信个人助理(自动回复/收款/定时发消息)

本文介绍如何利用Python和pywinauto库构建微信个人助手,实现自动回复、定时消息、智能收款等功能,告别重复劳动。通过详细的代码示例和配置指南,帮助开发者快速掌握微信自动化技术,提升工作效率。

weixin_42568801的博客 332

poj 3208 Apocalypse Someday(数位dp)

题目链接:poj 3208 Apocalypse Someday 题目大意:给定n,输出第n大包含666的数字。 解题思路:数位dp,用类似AC自动机的思想进行转移。首先dp[i][j]表示说i位最后有j个连续6的情况数,这个预处理出 来。那么dp[i][3]即为i位有多少个满足的数。给定n,先确定位数d。然后从最高位向下判断,一开始肯定是需要3个连续 的6,所以u为3,然

不慌不忙、不急不躁 2344

ZYNQ Linux环境下PS端I2C驱动OV5640摄像头全流程解析

本文详细解析了在ZYNQ Linux环境下,通过PS端I2C驱动OV5640摄像头的完整流程。内容涵盖从Vivado硬件配置、PetaLinux系统构建、设备树节点添加,到用户空间I2C编程与寄存器配置实战,并提供了关键的调试技巧与常见问题排查方法,帮助开发者快速实现嵌入式视觉应用的传感器配置。

vulkan6gpu的博客 853

【poj3208-Apocalypse Someday】数位DP

【poj3208-Apocalypse Someday】数位DP 题意:问你在所有包含666的数中,第n大的是多少。(1 ≤ n ≤ 50,000,000) 。开头几个是666, 1666, 2666, 3666, 4666, 5666… 题解: 这题可以用AC自动机,不知道这个怎么做。。 用了数位DP。 第一道自己好好调出来的数位DP。。...

qq_25768269的博客 211

手把手教你用yt-dlp批量下载YouTube视频数据集(附TikTok/Kaggle资源)

本文提供了一份构建视频数据集的实战指南,重点介绍了使用yt-dlp工具批量下载YouTube视频的高级技巧,包括环境配置、批量参数设置与自动化脚本。同时,文章还整合了TikTok、Kaggle及学术开源数据集等多源高质量视频资源,并分享了数据清洗、格式统一与管理的完整流程,帮助研究者和开发者高效获取与处理训练数据。

weixin_29057237的博客 291

Cadence Allegro安装全攻略:从准备到优化的完整指南

本文提供了一份详尽的Cadence Allegro安装教程,涵盖从系统准备、硬件要求到获取安装文件的完整前期工作。指南逐步解析了自定义安装、路径选择及核心组件配置,并重点阐述了许可证服务器的环境变量设置与服务启动等关键激活步骤,最后给出了首次启动验证、个性化优化及常见问题排错方案,助您高效完成安装与配置。

weixin_29243063的博客 186

POJ 3208 Apocalypse Someday 二分答案+数位DP

这题应该是POJ最强大的一道数位DP了吧 正解是AC自动机 不会 还是写数位DP吧 题目大意:我们令含有666的数字为不吉利数字,则可以得到一个递增数列: {an}=666,1666,2666,3666,4666,5666,6660,6661,.... 给定n,求an 首先我们把这个问题转化成另一个问题:给定n,求1~n中有多少个数含有666 解决了这个问题,把原问题二分答案即可 首先

世界 2842

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

【POJ3208】Apocalypse Someday(二分,数位DP)

Description 666号被认为是神秘的“野兽之数”,在所有以启示录为主题的大片中都是一个被广泛使用的数字。但是,这个数字666不能总是在脚本中使用,所以应该使用1666这样的数字。让我们把至少包含三个连续的六位数字的数字称为可怕的数字。头几个可怕的数字是666,1666,2666,3666,4666,5666… 给定一个基于1的索引n,程序应该返回第n个可怕的数字。 Input 第一行包含...

ezoi_ly的博客 309

【抖音】a_bogus参数逆向分析

点击——展开xxx条回复﹀就会出现。可以看到这个栈是有请求相关的数据的。所以就是在bdms.js里面生成的。

qq_44990881的博客 3000

海康威视 2DC 系列球机手机直连实用教程

海康威视2DC系列球机手机直连教程:首先确认设备支持直连功能并下载官方"海康互联"App;通过网线连接球机与路由器,使用SADP软件调整IP至同一网段;在App中添加设备并激活,完成调试即可远程查看监控画面。常见问题包括部分型号需远程解锁、网络连接异常等,可通过检查网络环境、联系客服等方式解决。本教程提供从准备到连接的完整指引,助您轻松实现手机监控管理。

海康威视技术支持 5409

poj 3208 Apocalypse Someday (数位dp)

Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 1490   Accepted: 686 Description The number 666 is considered to be the occult “number

To be what you what to be! 1333

制作3D地形图的方法-使用GlobalMapper和3ds Max软件

打开GlobalMapper软件,在菜单栏中选择“文件”>“打开数据文件”,然后选择相应的高程数据文件。在菜单栏中选择“渲染”>“渲染设置”,根据需要进行设置,如分辨率和输出格式。选择地形对象,点击菜单栏中的“渲染”>“材质编辑器”,然后根据需要调整材质属性,如颜色、纹理和光照等。在菜单栏中选择“工具”>“高程栅格和网格”>“创建地形网格”。在菜单栏中选择“文件”>“导出”>“导出栅格格式”。打开3ds Max软件,在菜单栏中选择“文件”>“导入”,然后选择之前导出的地形数据文件。步骤3:导出地形网格。

JqlScala的博客 1535

POJ 3208-Apocalypse Someday【数位DP+二分】

题意:给你一个n(n<5e7),让你找到第n个包含“666”的数。 思路:妥妥的数位DP,我们可以考虑二分答案,左边界为0,右边界我提前试了一下发现在(1<< 32)之内,我们不断逼近左边界一定可以找到答案,需要注意的是会计算上0,所以要减去1 #include<cstdio> #include<cstring> #include<iostre...

独钓门前月 470

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

poj 3208 Apocalypse Someday(数位dp)

题意:给定n,输出第n大包含666的数字。 分析:数位dp,详见《算法竞赛进阶指南》P342-344。 代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long f[21][4]; i...

常胜将军的博客 333

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【POJ3208】Apocalypse Someday【数位DP】

poj链接 题目大意 求第nnn个包含666666666的正整数。 题解 这种有包含字符的数位DP题,一般套用ac自动机(kmp)的思想建出失配指针。 以还缺几个6建出四个节点的fail树,nxt指针预处理出来(即为g[i][j]g[i][j]g[i][j])。 还要预处理f[i][j]f[i][j]f[i][j]:表示位数为iii且包含连续jjj个6的数的个数,规定连续3个或以上的6...

ezoixx118的博客 302

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ3208 Apocalypse Someday(二分 数位DP)

数位DP加二分 //数位dp,dfs记忆化搜索 #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long LL; #define N 20 LL dp[N][3];//dp[i][j]表示长度为i...

Nobel7889的专栏 253

poj3208 Apocalypse Someday[数位DP]

数位中出现至少3个连续的'6'的数字(称魔鬼数),询问满足要求的排名k的数。 经典题型。采用试填法。 递推做法:预处理出$i$位数字中满足要求的数(下记为'魔鬼数')。对每一位都从0到9试一遍,然而卡在了试填时试到6这个数时该怎么办,不太会做。然后才知道可以记录填到目前的上一位已有多少个连续的6,这样可以配合当前的计算出来。 所以就有这个$f[i][0]=9*(f[i-1][0...

dianer2977的博客 106

poj 3208 Apocalypse Someday(数位DP,4级)

Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 1385   Accepted: 632 Description The number 666 is considered to be the occult “numbe

nealgavin的专栏 909

Poj 3208 Apocalypse Someday(数位dp + 二分)

题目大意:   有三个连续的6在一起的数就是beast数,前几个beast数是:666,1666,2666,…   T组数据,每组询问排名为n的beast的数是什么? 解题思路 第一眼看到懵逼了,不是通常问这种类型的数在某个区间有多少个吗,为啥子这样问 思考ing… 我只要二分一下每个数,对每个数都求一遍数位dp,算出在这个数范围内有多少个这样的数,而且是答案是满足单调递增的!!! 剩下的思路:就是参考 hdu不要62, 改成不要666 即可 AC代码: #include <iostream>

trouble_的博客 240

poj3208 Apocalypse Someday (数位dp + 二分)

The number 666 is considered to be the occult “number of the beast” and is a well used number in all major apocalypse themed blockbuster movies. However the number 666 can’t always be used in the scri...

yhb的博客 241

POJ3208-Apocalypse Someday【数位dp】

正题 题目链接:http://poj.org/problem?id=3208 题目大意 求第X个有3个连续的6的数。 解题思路 用fi,j(j&lt;3)fi,j(j&lt;3)f_{i,j}(jfi,3fi,3f_{i,3}表示i位的魔鬼数的总数。 然后动态转移方程。 fi,0=9∗(fi−1,0+fi−1,1+fi−1,2)fi,0=9∗(fi−1,0+fi−1,...

QuantAsk 463

poj 3208 Apocalypse Someday 数位dp+二分答案

Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 2203   Accepted: 1110 Description The number 666 is considered to be the ...

pxlsdz的博客 509

POJ-3208 Apocalypse Someday (数位DP)

只要某数字的十进制表示中有三个6相邻,则该数字为魔鬼数,求第X小的魔鬼数\(X\le 5e7\) 这一类题目可以先用DP进行预处理,再基于拼凑思想,用“试填法"求出最终的答案 \(F[i,3]\)表示由 \(i\) 位数字构成的魔鬼数有多少个,\(F[i,j](0\le j\le 2)\) 表示由 \(i\) 位数字构成的,开头已经有连续 \(j\) 个6的非魔鬼数有多少个。(允许...

weixin_30699741的博客 147

POJ 3208 Apocalypse Someday(数位DP)

思路:二分+数位DP,二分没什么好说的,主要是数位DP,我一开始状态是设计成dp[N][100],表示i位,后两位为j,这样是会T的。。而其实第二维,只要开3就够了,表示末尾连续的6的个数,因为超过3个就不用转移了 代码: #include #include #include using namespace std; typedef long long ll; const int N

Remilia's 972

POJ 3208 Apocalypse Someday(数位dp)

题意:输出第n个包含连续三个6的数 思路: dp[i][0]表示i位数中首位不为6且不含666的数的数量 dp[i][1]表示i位数中首位连续1个6并且不含666的数的数量 dp[i][2]表示i位数中首位连续2个6并且不含666的数的数量 dp[i][3]表示i位数中含有666的数的数量 写出递推关系即可,再确定出带求的数有多少位,再从高位到低位逐次确定 //132K 16MS

kalilili的专栏 1007
上一篇: A decorative fence (POJ - 1037,计数类 DP)
下一篇: Batting Practice (LightOJ - 1408,概率 & 期望)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值