CF1560D Make a Power of Two 题解
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 题解的更多相关文章
- Power Strings[poj2406]题解
Power Strings Description - Given two strings a and b we define ab to be their concatenation. For ex ...
- leetcode 231 Power of Two(位运算)
Given an integer, write a function to determine if it is a power of two. 题解:一次一次除2来做的话,效率低.所以使用位运算的方 ...
- 最短路<dijk>
题意: 有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路.按格式输出. power oj 2443 题解: 标准dijk算法. #include<c ...
- LeetCode编程训练 - 位运算(Bit Manipulation)
位运算基础 说到与(&).或(|).非(~).异或(^).位移等位运算,就得说到位运算的各种奇淫巧技,下面分运算符说明. 1. 与(&) 计算式 a&b,a.b各位中同为 1 ...
- 算法与数据结构基础 - 位运算(Bit Manipulation)
位运算基础 说到与(&).或(|).非(~).异或(^).位移等位运算,就得说到位运算的各种奇淫巧技,下面分运算符说明. 1. 与(&) 计算式 a&b,a.b各位中同为 1 ...
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- 【题解】Power Strings
题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入 ...
- 洛谷3800:Power收集——题解
https://www.luogu.org/problemnew/show/P3800 可以把游戏界面理解成一个N行M列的棋盘,有K个格子上有P点,其价值为val(i,j) 初始灵梦可以选择在第一行的 ...
- 题解 SP7579 YOKOF - Power Calculus
SP7579 YOKOF - Power Calculus 迭代加深搜索 DFS每次选定一个分支,不断深入,直至到达递归边界才回溯.这种策略带有一定的缺陷.试想以下情况:搜索树每个节点的分支数目非常多 ...
随机推荐
- SuperEdge再添国产智能加速卡支持,为边缘智能推理再提速10倍
作者 寒武纪AE团队,腾讯云容器中心边缘计算团队,SuperEdge 开发者 SuperEdge 支持国产智能加速卡寒武纪 MLU220 SuperEdge 对应的商业产品 TKE Edge 也一直在 ...
- 【Tool】IDEA功能--SVN和Git
IDEA功能--SVN和Git 2019-11-08 21:12:22 by冲冲 1.IDEA的SVN (1)提交项目代码到SVN服务器 ① 指定不用上传的目录 ② 设置项目上传的路径 SVN服务 ...
- electron另一种运行方式
编写helloword 全局安装软件 npm install -g electron 快速编写html html:5 完整代码和流程: 1.index.html <!DOCTYPE htm ...
- 《重学Java高并发》Sempahore的使用场景与常见误区
大家好,我是威哥,<RocketMQ技术内幕>一书作者,荣获RocketMQ官方社区优秀布道师.CSDN2020博客执之星Top2等荣誉称号.目前担任中通快递技术平台部资深架构师,主要负责 ...
- 快速沃尔什变换&快速莫比乌斯变换小记
u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) ...
- 手写Bitset优化
一种优化方法,具体例子可以看这里 这里只是存一下手写Bitset的板子 struct Bitset { unsigned a[1600]; void reset() { memset(a,0,size ...
- [源码解析] PyTorch 分布式 Autograd (4) ---- 如何切入引擎
[源码解析] PyTorch 分布式 Autograd (4) ---- 如何切入引擎 目录 [源码解析] PyTorch 分布式 Autograd (4) ---- 如何切入引擎 0x00 摘要 0 ...
- 【豆科基因组】绿豆Mungbean, Vigna radiata苏绿基因组预印
目录 一.来源 二.结果 测序组装 组装评价 编码基因预测 基因功能注释 非编码RNA注释 假基因预测 重复序列注释 进化分析和分歧时间估计 全基因组复制 LTR插入时间估计 正选择基因 一.来源 H ...
- 【pheatmap热图scale报错】Error in hclust(d, method = method):NA/NaN/Inf in foreign function call (arg 11)
初始数据类似如下: 填充下缺失值 data[data==0] <- NA data[is.na(data)] <- min(data,na.rm = T)*0.01 pheatmap(lo ...
- 全基因组选择育种(GS)简介
全基因组选择(Genomic selection, GS)是一种利用覆盖全基因组的高密度标记进行选择育种的新方法,可通过早期选择缩短世代间隔,提高育种值(Genomic Estimated Breed ...