Content

给定一个整数 \(n\)。每次操作你可以做两件事情中的一件:

  • 删去这个数中的一个数位(如果这个数只剩下一位,则可以把它删空)。
  • 在这个数的右边添加一个数位。

你可以以任意顺序执行无限次操作。但请注意,在删去一个数位之后,这个数可能包含前导零(例如在删去 \(301\) 中的 \(3\) 这一位之后,这个数就会变成 \(01\) 而不是 \(1\))。

你需要执行若干次操作,使得这个数最终变成一个 \(2\) 的次幂,或者说存在一个非负整数 \(k\) 使得这个数最终是 \(2^k\)。最终答案不能包含前导零。请求出需要执行的操作的最小次数。

数据范围:\(t\) 组数据,\(1\leqslant t\leqslant 10^4\),\(1\leqslant n\leqslant 10^9\)。

Solution

这题目讲究的就是一个枚举。由于 \(2\) 的次幂是呈指数级增长的,因此在 \(10^{18}\) 的范围以内的 \(2\) 的次幂也只有 \(59\) 个。所以我们可以直接枚举每一个 \(10^{18}\) 以内的 \(2\) 的次幂,求出当前数修改成每个 \(2\) 的次幂需要的最小操作次数,取最小值即可。这种枚举方法在本题中亲测可过。

其次,如何求出当前数修改成 \(2\) 的次幂的最小操作次数?我们不妨将数转化为字符串,然后考虑尽量多地去做第一种操作,留下 \(2\) 的次幂或者 \(2\) 的次幂的一个前缀,因此这可以转化为求出第一个数字串的最长前缀子序列,直接拿一个指针比对即可。设第一个数字串的长度是 \(l_1\),第二个数字串的长度是 \(l_2\),求出的第一个串的最长前缀子序列的长度为 \(len\),那么最小修改次数就是 \(l_1+l_2-2\cdot len\),因为需要 \(l_1-len\) 次第一种操作将不是子序列中的数字删除,另外还需要 \(l_2-len\) 次第二种操作将 \(2\) 的次幂的前缀变为 \(2\) 的次幂。

注意这里要枚举到 \(10^{18}\),因为它可能在这个数的右边添加一个数位,所以直接枚举到 \(10^9\) 显然无法枚举完整所有的情况。

Code

namespace Solution {
const int N = 67;
int cnt;
string ans[N]; inline string ll_to_str(ll x) {
string ans = "";
ll p = x;
while(p) ans += (p % 10 + '0'), p /= 10;
reverse(ans.begin(), ans.end());
return ans;
}
ii solve(string a, string b) {
int lena = a.size(), lenb = b.size(), j = 0;
F(int, i, 0, lenb - 1) if(b[i] == a[j]) ++j;
return lenb + lena - 2 * j;
} iv Main() {
for(ll i = 1; i <= 1e18; ans[++cnt] = ll_to_str(i), i <<= 1ll);
MT {
string s; cin >> s;
int res = 0x3f3f3f3f;
F(int, i, 1, cnt) res = min(res, solve(ans[i], s));
println(res);
}
return;
}
}

CF1560D Make a Power of Two 题解的更多相关文章

  1. Power Strings[poj2406]题解

    Power Strings Description - Given two strings a and b we define ab to be their concatenation. For ex ...

  2. leetcode 231 Power of Two(位运算)

    Given an integer, write a function to determine if it is a power of two. 题解:一次一次除2来做的话,效率低.所以使用位运算的方 ...

  3. 最短路<dijk>

    题意: 有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路.按格式输出. power oj 2443 题解: 标准dijk算法. #include<c ...

  4. LeetCode编程训练 - 位运算(Bit Manipulation)

    位运算基础 说到与(&).或(|).非(~).异或(^).位移等位运算,就得说到位运算的各种奇淫巧技,下面分运算符说明. 1. 与(&) 计算式 a&b,a.b各位中同为 1 ...

  5. 算法与数据结构基础 - 位运算(Bit Manipulation)

    位运算基础 说到与(&).或(|).非(~).异或(^).位移等位运算,就得说到位运算的各种奇淫巧技,下面分运算符说明. 1. 与(&) 计算式 a&b,a.b各位中同为 1 ...

  6. C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速

    Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...

  7. 【题解】Power Strings

    题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入 ...

  8. 洛谷3800:Power收集——题解

    https://www.luogu.org/problemnew/show/P3800 可以把游戏界面理解成一个N行M列的棋盘,有K个格子上有P点,其价值为val(i,j) 初始灵梦可以选择在第一行的 ...

  9. 题解 SP7579 YOKOF - Power Calculus

    SP7579 YOKOF - Power Calculus 迭代加深搜索 DFS每次选定一个分支,不断深入,直至到达递归边界才回溯.这种策略带有一定的缺陷.试想以下情况:搜索树每个节点的分支数目非常多 ...

随机推荐

  1. ant命令

    ant -help 帮助(ant -h) ant -projecthelp 列举xml中重要的部分 (ant -p) ant -version 查看版本 ant -diagnostics 打印所有环境 ...

  2. 7.2 k8s 基于PV、PVC搭建zookeeper 3节点集群

    1.PV,PVC介绍 1.1.StorageClass & PV & PVC关系图 Volumes 是最基础的存储抽象,其支持多种类型,包括本地存储.NFS.FC以及众多的云存储,我们 ...

  3. 【2020五校联考NOIP #8】狗

    题面传送门 原题题号:Codeforces 883D 题意: 有 \(n\) 个位置,每个位置上要么有一条狗,要么有一根骨头,要么啥都没有. 现在你要给每个狗指定一个方向(朝左或朝右). 朝左的狗可以 ...

  4. CURL常用参数

    1. CURL简介 cURL是一个利用URL语法在命令行下工作的文件传输工具.它支持文件上传和下载,是综合传输工具.cURL就是客户端(client)的URL工具的意思. 2. 常用参数 -k:不校验 ...

  5. SIG -MESH -1

    协议栈    node:成为蓝牙mesh网络中一员的设备被称为节点(Node). 蓝牙mesh规格定义了节点可能拥有的特性.具有这些特性中的一个或多个,即表示节点可以在网络中扮演相应的特殊角色.定义的 ...

  6. LeetCode两数之和

    LeetCode 两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是 ...

  7. Java实现读取文件

    目录 Java实现读取文件 1.按字节读取文件内容 使用场景 2.按字符读取文件内容 使用场景 3.按行读取文件内容 使用场景 4.随机读取文件内容 使用场景 Java实现读取文件 1.按字节读取文件 ...

  8. C++最小内积

    Description 向量是几何中的一个重要概念. 考虑两个向量 v1=(x1,x2,...,xn)和v2=(y1,y2,...,yn),向量的内积定义为 x1y1+x2y2+...+xnyn 例如 ...

  9. c学习 - 算法

    简介: 一个程序包括两方面内容:数据结构.算法 数据结构:对数据的描述,包括数据的类型和数据的组织形式 算法:对操作的描述,即操作步骤 (程序=算法+数据结构) 算法是灵魂,数据结构是加工对象,语言是 ...

  10. shell神器curl命令的用法 curl用法实例笔记

    shell神器curl命令的用法举例,如下: ##基本用法(配合sed/awk/grep) $curl http://www.jquerycn.cn ##下载保存 $curl http://www.j ...