hdu 1438 钥匙计数之一

2023-11-06

Problem

acm.hdu.edu.cn/showproblem.php?pid=1438

Reference

blog.csdn.net/u010405898/article/details/9530769

blog.csdn.net/zoucharming/article/details/42918275

Meaning

一把钥匙 n 个槽,槽深可为 1、2、3、4,至少有 3 种槽深,至少有两个连续的槽满足深度差为 3。求合法钥匙数。

Analysis

a[i]:长度为 i 的合法钥匙数

b[i]:长度为 i 的、以 1 或 4 结尾的合法钥匙数

对任意一根长为 i 的合法钥匙,第 i+1 位加上任意深度的槽也合法;

对一根长为 i 的不合法钥匙,如果添加第 i+1 位就合法,有两种情况:

1. 前 i 位全是 1 和 4(但不能只有 1 或只有 4),满足了深度差为 3 的要求,但不满足至少 3 种槽深的要求。此时在 i+1 位补 2 或 3 即可。

2. 前 i 位满足了至少 3 种槽深的要求,但不满足深度差为 3 的要求。此时如果第 i 位是 1 或 4,那在第 i+1 位补 4 或 1 即可。

也就是:前 i-1 位随便放,第 i 位放 1 或 4,第 i+1 位放 4 或 1。(但前 i 位不能只有 1 和 4,或者合法)

(上面只考虑新加的一个槽补在最后,而不考虑插在中间的情况,因为插中间其实就是在合法序列后任意补的情况)

所以:a[i] = a[i-1] * 4 + [ 2^(n-1) - 2 ] * 2 + 2 * 4^(i-2) - 2^(i-1) - b[i-1]

b[i] = a[i-1] * 2 + 2 * 4^(i-2) - 2^(i-1) - b[i-1]

Source code

#include <stdio.h>
#define N 31

long long a[N+1] = {0, 0, 0, 8, 64, 360};
long long b[N+1] = {0, 0, 0, 4};

int main()
{
	int i;
	for(i=4; i<=N; ++i)
	{
		long long tmp;
		// 合法序列末尾加任意槽深:a[i-1] * 4
		a[i] = a[i-1] << 2;
		// 末尾加2/3:[2^(n-1) - 2] * 2
		a[i] += (1LL << i) - 4;
		// 末尾加1/4:2*4^(i-2) - 2^(i-1) - b[i-1]
		tmp = (1LL << 2*i-3) - (1LL << i-1) - b[i-1];
		a[i] += tmp;
		b[i] = (a[i-1] << 1) + tmp;
	}
	for(i=2; i<=N; ++i)
		printf("N=%d: %I64d\n", i, a[i]);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu 1438 钥匙计数之一 的相关文章

  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • java分页工具集合

    java分页工具集合 说明 一 PageHelper 1 pom 2 配置 3 使用 正确使用 错误使用 二 mybatis plus的分页插件 1 pom 2 配置 3 使用 三 自定义工具类 1 创建分页工具类 2 使用 说明 更新时间
  • 写一个查找表和数组的算法

    写一个查找表和数组的算法 查找有无一般使用set数据结构 查找对应关系使用Map映射数据结构 给定两个数组nums1 1 2 2 1 num2 2 2 求两个数组的公共元素 结果为 2 将一个集合中的元素存入set集合中 然后从另一个集合中
  • DataView的用法

    转载 http www 360doc com content 14 0422 15 19147 371133095 shtml DataView就是表示用于排序 筛选 搜索 编辑个导航的DataTable的可绑定数据的自定义视图 DataV
  • BES2300x笔记(33) -- 通话音量、回声与降噪调试

    哈喽大家好 这是该系列博文的第三十三篇 篇 lt lt 系列博文索引 快速通道 gt gt 通话算法调试指南下载 一 前言 一次心血来潮 使用正在开发的蓝牙耳机跟朋友交流感情 正说着 朋友吐槽我吐字不清晰 声音又小 没一点子诚意 W T 我
  • 第19讲 建立玻璃幕墙

    这里主要是进行了玻璃的 prop的glass和corner
  • flutter iOS 屏蔽黑暗模式

    前言 因为项目没有考虑到适配黑暗模式的场景 所以为了避免出现各种各样奇葩的问题 我们是建议把黑暗模式关闭 这样加能解决许多的bug 一 flutter层面设置 override Widget build BuildContext conte
  • OSError: /usr/local/lib/python3.7/dist-packages/torchtext/_torchtext.so: undefined symbol: _ZNK3c10

    本文目录 运行截图 解决 1 查找torch1 7对应torchtext版本 2 安装torchtext 3 重启kernel 参考资料 说明 在Colab上跑模型报错 其中torch版本1 7 运行截图 报错信息如下 Traceback
  • Failed to bind properties under ‘spring.datasource.type’ to java.lang.Class的解决方法

    Failed to bind properties under spring datasource type to java lang Class
  • STM32 usb 设备实现自动重枚举

    在开发USB设备时可能会经常遇到烧录程序后要重新拔插USB接口才能使USB设备正常工作 原因是因为重新烧录后 PC没有对USB设备进行重枚举 导致无法正常工作 解决方法很简单 我们只要在程序启动后第一时间对USB接口的DP引脚进行一下拉低操
  • Web自动化Selenium-JavaScript的应用

    JavaScript是Web页面的编程语言 Selenium提供了execute script方法 用来执行JavaScript 从而完成一些特殊的操作 操作页面元素 我们可以借助JavaScript操作页面元素 如在搜索框中输入文字 单击
  • Sublime text3 Version 3.22下载安装及注册

    文章目录 前言 一 下载Sublime Text 3 1 本机系统配置 Windows10 64位 2 下载链接 3 安装 二 注册 3步走 1 修改hosts文件 2 修改编辑 sunlime text exe 3 注册 三 参考文章 前
  • c++SQLite

    SQLite C 操作类 转载于 http blog csdn net chinamming article details 17049575 0 tsina 1 1347 397232819ff9a47a7b7e80a40613cfe1
  • 【前端部署】vue项目打包并部署到Linux服务器

    文章目录 一 打包vue前端项目 二 安装nginx 1 下载及安装 2 启动程序 3 其他命令 三 利用WinSCP传输文件 四 配置nginx 1 修改服务器端口 2 修改dist存放路径 3 完整配置文件 五 进入界面和项目更新 1
  • office2021专业增强版,使用kms命令行激活

    以管理员身份运行cmd 注意 必须以管理员身份运行 分别输入以下命令 cd C Program Files Microsoft Office Office16 cscript ospp vbs sethst kms 0t net cn cs
  • sqli-labs通关全解---有关过滤的绕过--less23,25~28,32~37--8

    preg replace 参数 作用 pattern 正则表达式或者要匹配的内容 replacement 要替换的内容 subject 要操作的对象 preg replace 用于sql注入防护中 主要是将一些疑似攻击的代码进行替换处理 从
  • python 获取毫秒级时间问题

    根据网上的一些说法 在python里获取ms级系统时间可以通过以下方式获取 import datetime print datetime datetime now microsecond 但通过以下代码测试 发现返回的并不是ms的值 而是u
  • 适用于Windows 10开发人员的Hyper-V

    Microsoft Hyper V codenamed Viridian is a native type 1 hypervisor that directly runs on the hardware compared to VMware
  • 2023年无人航空系统与航空航天国际会议(ICUASA 2023)

    2023年无人航空系统与航空航天国际会议 ICUASA 2023 重要信息 会议网址 www icuasa org 会议时间 2023年2月18 20日 召开地点 中国广州 截稿时间 2023年12月30日 录用通知 投稿后2周内 收录检索
  • numpy、pandas实用总结(3种数据合并)

    前言 将俩个或者多个DataFrame合并在一起 这样的操作在日常工作中是极为频繁的一件事情 目前 我所知的有四种将DataFrame合并在一起 的方法 concat 在Series中也可以使用 merge join concat合并 这种
  • hdu 1438 钥匙计数之一

    Problem acm hdu edu cn showproblem php pid 1438 Reference blog csdn net u010405898 article details 9530769 blog csdn net