分析

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

记前 \(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 9.0新特性

    1.全面屏支持,Android P加入了对刘海屏的支持,谷歌称之为凹口屏幕(display with a cutout).借助最新的提供的DisplayCutout类,开发者可以找到非功能区域的位置和 ...

  2. wap2app(十)--wap2app 添加原生底部导航,添加原生标题栏,填坑

    一.添加原生标题栏 添加原生标题栏可以参照 <wap2app(六)-- wap2app的原生标题头无法隐藏>,具体如下: 1.打开 sitemap.json文件 --> page配置 ...

  3. 【LeetCode】正则表达式匹配(动态规划)

    题目描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s ...

  4. (后端)Mybatis实现批量删除操作(转)

    原文地址:https://blog.csdn.net/javaee_sunny/article/details/52511842 一. 这里主要考虑两种参数类型:数组或者集合. 而这点区别主要体现在E ...

  5. Spring Data Redis 让 NoSQL 快如闪电(2)

    [编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis ...

  6. [20180928]ora-01426(补充).txt

    [20180928]ora-01426(补充).txt --//链接:http://www.itpub.net/thread-2105458-1-1.html--//做一点点必要的补充: 1.环境:S ...

  7. SQL Server的实例恢复解析

    同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...

  8. Java入门(四):运算符优先级、关键字与保留字

    上次介绍了Java的运算符,今天来介绍下运算符的优先级,以及Java的关键字.保留字. 一.运算符优先级 序号 运算符 名称 目数 结合性 说明 1 [ ] 方括号 从左向右 优先级最高 . 点号 双 ...

  9. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  10. 我为什么要谈KeepAlive(文末增加nginx 负载tcp长连接保持 demo)

    http://blog.sina.com.cn/s/blog_e59371cc0102ux5w.html 最近工作中遇到一个问题,想把它记录下来,场景是这样的: 从上图可以看出,用户通过Client访 ...