SCP-bzoj-1019
项目编号:bzoj-1019
项目等级:Safe
项目描述:
特殊收容措施:
对于一个hanoi,知道了各种移动操作的优先级,也就确定了方案。可以证明对于盘子数为N的hanoi,任意移动方案都等价于将数目为N-1的一叠盘子移动k次,并将最小的一个盘子经过b次后移动到目标柱顶端。这样,hanoi的任一移动方案所需次数都满足线性递推式f[n]=k*f[n-1]+b。
因此我们暴力算出数列f的前几项(更确切地,前三项即可),然后递推即可。加上矩乘优化后理论复杂度O(log2n)。
附录:
(嗯,实际上N≤30根本不需要矩乘。。也懒得写。。)
#include <bits/stdc++.h>
#define range(i,c,o) for(register int i=(c);i<(o);++i)
#define dange(i,c,o) for(register int i=(c);i>(o);--i)
using namespace std; static int N;
long long f[];
string opt[];
stack<int> stick[]; inline long long solve(const int&x)
{
long long ret=; int las=;
range(i,,) for(;!stick[i].empty();stick[i].pop());
dange(i,x,) stick[].push(i);
for(;stick[].size()<x&&stick[].size()<x;++ret)
{
range(i,,)
{
int fr=opt[i][]-'A',to=opt[i][]-'A';
if(
fr!=las&&!stick[fr].empty()&&(
stick[to].empty()||
stick[fr].top()<stick[to].top()
)
)
{
stick[las=to].push(stick[fr].top());
stick[fr].pop(); break;
}
}
}
return ret;
} int main()
{
ios::sync_with_stdio();
cin>>N; range(i,,) cin>>opt[i];
f[]=,f[]=solve(),f[]=solve();
long long k=(f[]-f[])/(f[]-),b=f[]-k;
range(i,,N+) f[i]=k*f[i-]+b;
return cout<<f[N]<<endl,;
}
SCP-bzoj-1019的更多相关文章
- BZOJ 1019: [SHOI2008]汉诺塔
Description 一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数. 规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的. Sol DP. 倒着 ...
- 【BZOJ 1019】【SHOI2008】汉诺塔(待定系数法递推)
1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 559 Solved: 341[Submit][Status] ...
- BZOJ 1019 汉诺塔
Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. 对汉诺塔的一次合法的操 ...
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...
- 【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
1019: [SHOI2008]汉诺塔 Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一 ...
- 【BZOJ 1019】 [SHOI2008]汉诺塔
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1019 [题意] [题解] 这个题解讲得很清楚了 http://blog.sina.co ...
- BZOJ 1019 :[SHOI2008]汉诺塔(递推)
好吧蒟蒻还是看题解的 其实看到汉诺塔就该想到是递推了 设f[i][j]表示i个在j杆转移到另一个杆的次数 g[i][j]表示i个在j杆转移到那个杆上 可得 f[i][j]=f[i-1][j]+1+f[ ...
- [BZOJ]1019 汉诺塔(SHOI2008)
找规律成功次数++. Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. ...
- 【BZOJ】【1019】【SHOI2008】汉诺塔
递推/DP 类似普通汉诺塔的一个递推(模拟?$10^{18}$没法模拟吧…… 题解:http://blog.csdn.net/regina8023/article/details/43016813 因 ...
- 【BZOJ】1019: [SHOI2008]汉诺塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题意:汉诺塔规则,只不过盘子n<=30,终点在B柱或C柱,每一次移动要遵守规则:1.小的 ...
随机推荐
- 启动kafka集群,关闭kafka集群脚本
启动kafka集群,关闭kafka集群脚本 在$KAFKA_HOME/bin下新建如下脚本文件 start-kafka.sh #!/bin/bash BROKERS="mini41 mini ...
- TP中如何用IF
将TP中这个容易忘的知识点记下来以便日后翻阅 $memberField = "ID, NAME, MOBILE, MEMBER_STATUS as status, IF (MEMBER_ST ...
- 2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 <敏捷开发与XP实践> 实验报告封面 课程:Java程序设计 班级:1751班 姓名:王鑫浩 学号:20175105 指导教师:王鑫浩 实验日期:2019年4月29日 实验时间:- ...
- 热经-北京中地时空数码科技有限公司-研发工程师(WEBGIS方向)
一面: 登记,填写个人信息 笔试 选择题: HTML,CSS,JS 的选择题,都是基础题.其中有一道问哪个不是 document 的属性或方法,我在 bgColor 和 focus() 上面纠结了一下 ...
- 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 工厂模式 使用工厂方法 Factory Method 创建 app 对 ...
- kubernetes安装部署
1.根据系统内核情况,选择对应的ali云上的镜像,作为仓库的路径指向来配置k8s https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes- ...
- MultipartFile 图片上传到Linux服务器Tomcat下的webapps目录
第一次接触 linux 服务器,做图片上传的时候遇到了些坑,搞了些天总算成功了,记录一下 /** * 上传图片 * * @param request * @param file * @return * ...
- Selenium:下拉框处理(Select模块)
在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块). ...
- jmeter工作原理介绍,以及常见错误
JMeter结果树响应数据中文乱码解决办法 打开jmeter配置文件搜索encoding修改编码格式改为utf-8 Jmeter服务器反馈登陆不成功问题 导入到JMeter后,执行场景,发现登录校验成 ...
- 【Nacos】数据一致性
转自:https://blog.csdn.net/liyanan21/article/details/89320872 目录 一.Raft算法 二.Nacos中Raft部分源码 init() 1. 获 ...