分析

首先考虑相邻柱子之间没有浮台。

记前 \(m-1\) 个盘子为 x, 第 \(m\) 个盘子为 y,有如下过程:\(x\rightarrow C, y\rightarrow B, x\rightarrow A, y\rightarrow C, x \rightarrow C\) 。

写出递推式:\(f(m)=f(m-1)+1+f(m-1)+1+f(m-1)\) 。

将递推式展开,容易得到:\(f(m-1)=3^{m-1}-1\) 。

发现如果第 \(X\) 步要取 \(m\) 的话就只有两个位置,分别是 \(X=3^{m-1}\) 和 \(X=2\times 3^{m-1}\) 。

什么时候可以取到 \(m-1\) ?考虑将递推式中的 \(f(m-1)\) 展开一层,容易发现当且仅当 \(3^{m-2}|X\) 且 \(3^{m-1}\nmid X\) 时,答案是 \(m-1\) 。所以可以直接用 \(X\) 不断整除三直到有余数,答案就是合法整除的次数+1。

实际有浮台可以转化成没有浮台,令两段为 L, R, 因为我们操作的序列一定形如 LRLRLRLR ,所以可以根据给定的 \(X\) 对 \(n-1\) 作除法得到的商和余数得到没有浮台模型下的步数。

复杂度 \(O(q*len*30)\),\(len\) 是大整数长度。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define go(u) for(int i = head[u], v = e[i].to; i; i=e[i].lst, v=e[i].to)
#define rep(i, a, b) for(int i = a; i <= b; ++i)
#define pb push_back
#define re(x) memset(x, 0, sizeof x)
inline int gi() {
int x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)) { if(ch == '-') f = -1; ch = getchar();}
while(isdigit(ch)) { x = (x << 3) + (x << 1) + ch - 48; ch = getchar();}
return x * f;
}
template <typename T> inline bool Max(T &a, T b){return a < b ? a = b, 1 : 0;}
template <typename T> inline bool Min(T &a, T b){return a > b ? a = b, 1 : 0;}
const int N = 1e3 + 7;
int n, m, k, q;
char s[N];
struct num {
int x[N], l;
num(){memset(x, 0, sizeof x); l = 0;}
num(int a){x[0] = a, l = 1;}
void read() {
scanf("%s", s);
l = strlen(s);
for(int i = 0; i < l; ++i) x[i] = s[l - i - 1] - '0';
}
pair<num, LL> operator /(LL f) {
num res;
LL rest = 0;
for(int i = l - 1; ~i; --i) {
rest = rest * 10 + x[i];
res.x[i] = rest / f;
if(!res.l && res.x[i])
res.l = i + 1;
rest %= f;
}
if(!res.l) res.l = 1;
return make_pair(res, rest);
}
num operator +(num rhs) {
num res;
for(int i = 0; i < min(rhs.l, l); ++i) res.x[i] = x[i] + rhs.x[i];
for(int i = min(rhs.l, l); i < max(rhs.l, l); ++i) {
if(l > i) res.x[i] += x[i];
if(rhs.l > i) res.x[i] += rhs.x[i];
}
res.l = max(rhs.l, l);
for(int i = 0; i < res.l; ++i) res.x[i + 1] += res.x[i] / 10, res.x[i] %= 10;
for(; res.x[res.l]; ++res.l) {
res.x[res.l + 1] += res.x[res.l] / 10;
res.x[res.l] %= 10;
}
return res;
}
}A, B;
int main() {
n = gi(), m = gi(), k = gi(), q = gi();
while(q--) {
A.read();
pair<num, LL> f = A / (n - 1);
B = f.first;
B = B + B;
if(f.second == 0);
else if(f.second < k) B = B + num(1);
else B = B + num(2);
int cnt = 1;
while(1) {
f = B / 3;
if(f.second == 0) ++cnt;
else break;
B = f.first;
}
printf("%d\n", cnt);
}
return 0;
}

SCOI2019d1t1平台跳跃[高精]的更多相关文章

  1. Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html

    Linux 高精確的時序(sleep, usleep,nanosleep) (2010-04-14 17:18:26) 转载▼ 标签: 杂谈 分类: linux 首先, 我会说不保证你在使用者模式 ( ...

  2. 2020云栖大会智慧出行专场:聚焦高精地图/算法、智能模型、自动驾驶、AR导航

    2020云栖大会将于9月17日-18日在线举行,届时将通过官网为全球科技人带来前沿科技.技术产品.产业应用等领域的系列重要分享.   阿里巴巴高德地图携手合作伙伴精心筹备了“智慧出行”专场.我们将为大 ...

  3. 高精地图技术专栏 | 基于空间连续性的异常3D点云修复技术

    1.背景 1.1 高精资料采集 高精采集车是集成了测绘激光.高性能惯导.高分辨率相机等传感器为一体的移动测绘系统.高德高精团队经过多年深耕打造的采集车,具有精度高.速度快.数据产生周期短.自动化程度高 ...

  4. WEB 三维引擎在高精地图数据生产的探索和实践

    1. 前言 高精地图(High Definition Map)作为自动驾驶安全性不可或缺的一部分,能有效强化自动驾驶的感知能力和决策能力,提升自动驾驶的等级.对于自动驾驶来说,高精地图主要是给机器用的 ...

  5. c++ 普通高精除高精

    //codevs3118 高精度练习之除法 //打出了高精除高精,内心有点小激动. //还记得已开始学的时候非常难打 #include<cstdio>#include<cstring ...

  6. c++普通高精加

    //作为一名蒟蒻,还请诸位不要吐槽. //第一次打c++高精加,内心有点小激动. //为codevs3116 高精度练习之加法 //程序太简单,就不打注释了. #include<cstdio&g ...

  7. BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1002 )*&*(^&*^&*^**()*) 1002: [FJOI20 ...

  8. bzoj 3287: Mato的刷屏计划 高精水题 && bzoj AC150

    3287: Mato的刷屏计划 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 43[Submit][Status] Desc ...

  9. codevs 3119 高精度练习之大整数开根 (各种高精+压位)

    /* codevs 3119 高精度练习之大整数开根 (各种高精+压位) 二分答案 然后高精判重 打了一个多小时..... 最后还超时了...压位就好了 测试点#1.in 结果:AC 内存使用量: 2 ...

随机推荐

  1. Android为TV端助力 http下载视频到指定目录

    public void httpget(String uri){ HttpURLConnection connection = null; FileOutputStream fos = null; F ...

  2. power designer的安装

    PowerDesigner的安装 原由:新学期要开概要设计(软件设计与体系结构)这门课,老师推荐了两个CASE工具. Rational Rose Power Designer 本来想找rose的资源, ...

  3. RecyclerView 高度不能随着Item数量 自适应高度

    在最近项目中遇到 ,在RecyclerView加载list数据时,高度无法自适应增长,看了很多博客,各种尝试,都没有解决这个问题,在某个博客中,讲到此解决方法,在此记录下. 即在RecyclerVie ...

  4. git 入门教程之配置 git

    配置 git 安装完成后,还需要最后一步配置就可以愉快使用了,在命令行输入: git config --global user.name "your username" git c ...

  5. Android Handler、Message、MessageQueue和Looper官方说明

    Handler官方说明 官方API文档:https://developer.android.google.cn/reference/android/os/Handler Handler允许您发送和处理 ...

  6. C#从http上拿返回JSON数据

    C#如何拿到从http上返回JSON数据? 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) ...

  7. python3中list列表的一些操作

    最近遇到许多List的操作,感觉它是一种很重要的一种基础数据结构,本人掌握的也不是很扎实,这里找了一些列表的操作,常用函数,记录下来,希望对大家有用.如果理解有偏差,欢迎指正,感谢! (1)列表的合并 ...

  8. C# -- 使用递归列出文件夹目录及目录下的文件

    使用递归列出文件夹目录及目录的下文件 1.使用递归列出文件夹目录及目录下文件,并将文件目录结构在TreeView控件中显示出来. 新建一个WinForm应用程序,放置一个TreeView控件: 代码实 ...

  9. June 7. 2018 Week 23rd Thursday

    Half is worse than none at all. 一知半解比一无所知更痛苦. From Westworld. If we go looking for the truth, get th ...

  10. May 26. 2018 Week 21st Saturday

    Do what you say, say what you do. 做你说过的,说你能做的. Be honest to yourself, and be honest to those people ...