首页 > 小红的数位删除
头像 kilomatutinal
发表于 2026-02-17 10:53:12
这道题其实简单喵~只需要用广度优先搜索(BFS)就可以探索所有可能的状态了喵!用结构体 zu 记录当前两个数的值 a、b 和已经操作的次数 cishu。从初始状态 (a, b) 开始,不断尝试对其中一个数删除每一位,生成新的数对,并记录步数。用 set<pair<int,int>& 展开全文
头像 smartiphone
发表于 2026-02-17 10:19:55
#include<bits/stdc++.h> #define inf 0x3fffffff #define endl '\n' using namespace std; int main() { cin.tie(nullptr)->sync_with_stdio(fal 展开全文
头像 Night_crusing
发表于 2026-02-18 01:50:38
通过位运算状态压缩解题和bfs搜索都是可行的,这里使用bfs #include<bits/stdc++.h> using namespace std; struct State { string sa; string sb; int steps; }; boo 展开全文
头像 BeauWill
发表于 2026-02-17 00:25:41
bfs搜索一下即可,每次枚举删除的数字是a或者b,然后枚举删除a或者b的每一个数位,通过转字符串删除该位,再转回int #include <iostream> #include <queue> #include <array> #include <map&g 展开全文
头像 YunBaichuan
发表于 2026-02-17 10:34:02
前言:祝大家新年快乐! 思路:暴力枚举。注意到题目的a,b数字最长为10,因此可以枚举a和b的所有子序列,然后判断是否满足条件,时间复杂度为,为大概是量级左右,可以通过 具体来说,我们可以枚举保留的位数个数i和j,然后用组合数函数combinations(a, x)表示从a这个迭代器或者数组等这种存 展开全文
头像 怎么不AC啊
发表于 2026-02-17 14:19:36
数位删除得到的值是原数值的子序列,只需要生成所有子序列,然后检查即可。 子序列的个数(至多)是,故时间复杂度为,可行. #include <climits> #include <iostream> #include <string> #include <ut 展开全文
头像 xiaosheng123
发表于 2026-02-17 16:33:57
import java.util.*; import java.io.*; public class Main { static class FastReader { BufferedReader br; StringTokenizer st; 展开全文
头像 此在Dasein
发表于 2026-02-17 17:42:47
本题的核心在于通过最少的删除操作,使得两个数字之间满足倍数关系(即 是 的倍数,或 是 的倍数)。 约束分析: 数据范围: 。 这意味着数字的长度最大仅为 10位 ( 是最小的10位数,最大值接近 )。 操作定义: 删除数位。这本质上是在寻找字符串的子序列 (Subsequence) 展开全文
头像 空调不够冷HA
发表于 2026-02-17 21:07:45
#include <stdio.h> #include <string.h> #include <stdlib.h> // 存储生成的子序列信息 typedef struct { long long val; int ops; } Node; N 展开全文