牛客小白赛-⑨运算(Hard Version)

news/2026/1/14 16:33:30/文章来源:https://www.cnblogs.com/leeezhusl/p/19343595

一、题目链接:https://ac.nowcoder.com/acm/contest/125080/E
二、题目大意:这道题的题目大意是给你一个数x,并给你两种操作。第一种操作可以无限次使用,在当前数上进行+9,第二种操作只能使用一次,在当前数上进行9,最终让各个位置上都是9,比如9,99,999。
三、思路:一开始我没有思路方向,于是对样例和自己举了几个例子进行模拟。在没啥清晰的头绪之际大胆总结了一下,一种是直接无限次进行操作1而不进行操作2,一种是在中途某个位置进行一次操作2。
1.x->x+9->x+9+9->x+9+9+9...+9;
2.x->x+9->x+9+...+9->(设此时变为y)y
9->y9+9->y9+...9;
然后对两种方法进行ans取min就好。
第一种情况下,设目标值为G,你能发现你x如果单纯每次加9,你对9的取余的结果是不会变的,于是第一种操作只有在(G-x)%90时才可以进行,其实也就是从G%9x%9推的,当然,你G要大于x。至于怎么找G,其实操作次数比较简单且少,直接枚举即可。然后可以计算出你此时的ans是(G-x)/9。这里如果想不明白的话可以考虑一下27变99。
对于第二种情况,其实表达式也很明了,我最终值依然为一个G,我的核心目的是找中间那个y为多少。看你y能取多少。现在卡住的就是y需不需要考虑尽量取最大或者最小这种可能,又或者随便取。那么你可以计算一下第二种情况的贡献,总共是(y-x)/9+1+(G-9*y)/9,你通分一下可以发现y取最大是最好的,且y的限制值lim小于G/9。至于怎么找y,可以很自然而然地想到二分答案。不过还有一种可行地方法是,我最终找到的那个y,实际上要跟x的取模相同,原因如上一段。所以y在[x,lim]中,最大的y就是lim%9-x%9,发现需要回退多少格,然后加9保证差为正数然后再%9,于是lim-这个回退格数就是我们要找的那个y。
四、总结:这题不难也不是太简单,我认为比较经典且套路,多做多总结就好了(对于我这种若狗来说
五、代码:

点击查看乐哥代码
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
using ll = long long;
using ldb=long double;
const int MOD = 998244353;
const int INF = 1e9;
// ===================================================
//                  How to Use:
// ===================================================
// ordered_set<int> S;
// S.insert(x);          // 插入
// S.erase(x);           // 删除
// S.find_by_order(k);   // 返回指向第k小元素的迭代器 (0-based)
// S.order_of_key(x);    // 返回小于x的元素个数
// ===================================================
ll qpow(ll a, ll b, ll mod)
{ll res = 1;a %= mod;while (b > 0){if (b & 1)res = (res * a) % mod;a = (a * a) % mod;b >>= 1;}return res;
}int getlen(ll x)
{string s = to_string(x);return s.length();
}
struct kind
{int len;int cnt;bool operator<(const kind &other) const{return len < other.len;}
};
ll gcd(ll a, ll b)
{return b == 0 ? a : gcd(b, a % b);
}
ll lcm(ll a, ll b)
{return a / gcd(a, b) * b;
}
const int MAXN = 2e5 + 5;
vector<int> depth(MAXN);
vector<int> indeg(MAXN, 0);
vector<int> outdeg(MAXN, 0);
// vector<int> g[MAXN];
vector<int> cnt[MAXN];
vector<int> mxdep(MAXN);
vector<int> in(MAXN), out(MAXN);
int tmm = 0;
// void dfs(int u, int d, int fa)
// {
//     depth[u] = d;
//     mxdep[u] = d;
//     in[u] = ++tmm;
//     bool ok = true;
//     for (int i = 0; i < g[u].size(); i++)
//     {
//         int v = g[u][i];
//         if (v == fa)
//             continue;
//         dfs(v, d + 1, u);
//         mxdep[u] = max(mxdep[u], mxdep[v]);
//         ok = false;
//     }
//     out[u] = tmm;
//     if (!ok)
//     {
//         cnt[d].push_back(in[u]);
//     }
// }
struct step
{int row;int l;int r;
};
struct Edge
{int u;int v;ll val;bool operator<(const Edge &other) const{return val < other.val;}
};
void solve()
{ll x;cin >> x;vector<long long> a9;ll tmp = 0;for(int i=0; i<15; i++){tmp = tmp * 10 + 9;a9.push_back(tmp);}ll ans = 2e18; for(ll g : a9) {if (g >= x && (g - x) % 9 == 0) {ans = min(ans, (g - x) / 9);}ll lim = g / 9;if (lim < x) continue; ll cur = x % 9;ll yu= lim % 9;ll diff = (yu- cur + 9) % 9;ll res = lim - diff;ll cost = (res - x) / 9 + 1 + (g - res* 9) / 9;ans = min(ans, cost);}if(ans == 2e18){cout << "-1\n";} else {cout << ans << "\n";}
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);int t;cin >> t;while (t--)//   {solve();//}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解】Luogu P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串

思路 对整串反异或有些唬人。但进行反异或操作的时刻是任意的,操作后依然可以往串首尾加数。也就是说,我们可以把问题转化成:一个长度为 \(|T|\) 的 01 串 \(S\),从中选取一段字串对其进行反异或操作使其变为 \(T\…

期待回家,顺便写点年度总结

今天北京下雪了,夜晚校园里的行人都比平时少的多(因为真的很冷),可越是这种寒冷寂寥的环境,越是会让人感觉到忧伤和孤独。 2025年快要结束了,现在已经是12月的12号了,今年也是相当精彩、丰富的,也是繁杂、焦虑…

E No address added out of total 1 resolved地址绑定失败: No address added out of total 1 resolved errors:

问题&#xff1a;运行VScode项目时&#xff0c;出现端口被占用&#xff0c;如何解决。E No address added out of total 1 resolved 地址绑定失败: No address added out of total 1 resolved errors: [listen EADDRINUSE: address already in use 127.0.0.1:50052]原因1&#…

计算机论文题目推荐:8大平台+50例AI生成

计算机论文题目推荐&#xff1a;8大平台50例AI生成 工具名称 主要功能 生成速度 适用场景 特色优势 秒篇 论文初稿生成 20-30分钟 全学科论文初稿 支持自动插入图表/公式/代码 aicheck 论文初稿生成 20-30分钟 全学科论文初稿 原创性高&#xff0c;AI生成率低 a…

【笔记】Manacher

Luogu P3805 【模板】manacher 解决问题:字符串中最长回文子串。 解决方法:求出字符串中每个字符作为回文串中心时最长回文串长度。 朴素做法,对于每个字符向后枚举比较,时间复杂度 \(O(n^2)\)。 Manacher 算法提供…

C51_74HC165并口转串口

文章目录一、74HC165二、74HC165使用   1、引脚   2、工作流程   3、原理图三、实例代码一、74HC165 74HC165 是 8 位并行输入串行输出移位寄存器&#xff0c;它是一款高速 CMOS 器件&#xff0c;遵循 JEDEC 标准。    74HC165 是一款8 位并行输入 - 串行输出的移位寄存…

八上期中考游记

真是失败的人生。 为了 CSP 花费了好多时间,但是变成了最差的一年,怎么回事呢? 语文 \(104\),炸飞了。 数学 \(148\) 挂到 \(140\),年段 rk \(1 \to 8\),这波真是失败的人生。 英语 \(130\),卷子好难,炸杠。 物…

application.properties

[Spring Boot] Java开发实战&#xff1a;Spring Boot应用详解 引言 Spring Boot是Java开发中一个非常重要的框架&#xff0c;它简化了Spring应用的初始搭建和开发过程。作为一年经验的Java开发者&#xff0c;我们需要学习它是因为现在大部分企业级项目都在使用Spring Boot。在实…

电动汽车永磁同步电机的电磁设计与最优控制探索

永磁同步电机具有效率高、功率密度大、鲁棒性强以及调速范围广等优点&#xff0c;被广泛应用于家用电器、航空航天、轨道交通与电动汽车等领域&#xff0c;是当前电机领域研究和应用热点。 本文以电动汽车驱动用永磁同步电机电磁设计和最优控制为研究内容&#xff0c;对永磁同步…

【题解】Luogu B4185 [中山市赛 2024/科大国创杯小学组 2023] 倍数子串/子串

明明是很容易的题模拟赛却没注意到。 数学、模拟 题意 略。 思路 不妨从 \(5\) 下手。一数仅当最后一位是 \(0\) 或 \(5\) 时,该数才是 \(5\) 的倍数。因此如果第 \(i\) 位是 \(0\) 或 \(5\),所有最后一位是 \(5\) 的…

智能客服机器人产品设计

目录完整的导购 FSM(有限状态机)设计 — 可直接交付给产品/架构/开发2. 状态表(每个状态的定义、触发条件、允许动作、默认 CTA、工具调用)GREETINGNEED_DISCOVERYPRODUCT_MATCHRECOMMENDATIONCOMPARISONOBJECTION…

JavaScript 异常原因(Error Cause):实现分布式系统错误链追踪的序列化与反序列化

在现代复杂的分布式系统中&#xff0c;服务的协同工作是常态。然而&#xff0c;服务的相互依赖也带来了巨大的挑战&#xff0c;尤其是在错误处理和故障诊断方面。当一个请求流经多个微服务时&#xff0c;任何一个环节的失败都可能导致整个业务流程中断。要高效地定位问题的根源…

毕业论文任务书范文推荐:7大平台+AI修改工具

毕业论文任务书范文推荐&#xff1a;7大平台AI修改工具 工具名称 核心功能 生成速度 适用场景 独特优势 aibiye 论文初稿生成 20-30分钟 全学科通用 自动插入图表公式 aicheck 初稿查重 20-30分钟 急需查重场景 独创降AIGC算法 askpaper 初稿生成 20-30分钟 …

天远多头借贷行业风险版API接口调用代码流程、接入方法以及应用场景

一、精细化风控时代的“多头”计量工具 在互金与银行信贷业务中&#xff0c;“多头借贷”&#xff08;Multi-Lending&#xff09;往往是借款人资金链断裂的前兆。然而&#xff0c;传统的借贷次数统计已难以满足精细化风控的需求——借款人是在银行申请房贷&#xff0c;还是在夜…

Python字典与集合:解锁高效数据处理的关键,90%的人没吃透这几点

Python字典与集合:解锁高效数据处理的关键,90%的人没吃透这几点 在Python数据结构家族中,字典(dict)和集合(set)是隐藏的“性能王者”。相比于列表和元组,它们在查找、添加、删除操作上的效率呈指数级提升,尤…

详细介绍:完整事务性能瓶颈分析案例:支付系统事务雪崩优化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算机论文选题推荐:9大AI+热门方向排名

计算机论文选题推荐&#xff1a;9大AI热门方向排名 &#xfffd;&#xfffd; 9大AI选题方向速览 排名 选题方向 创新指数 研究热度 就业前景 1 大模型微调与应用 ⭐⭐⭐⭐⭐ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&…

JavaScript 记录(Records)与 元组(Tuples):实现堆内存中不可变复合数据结构的内存布局

JavaScript作为一门动态、弱类型的语言&#xff0c;其灵活性在带来了开发效率的同时&#xff0c;也引入了管理复杂状态和确保数据完整性的挑战。长期以来&#xff0c;JavaScript开发者在处理不可变数据结构时&#xff0c;不得不依赖于浅层冻结&#xff08;如Object.freeze()&am…

虚函数虚表

一、基本原理1.虚函数&#xff1a;用virtual关键字生声明的函数&#xff0c;允许派生类重写2.虚表&#xff1a;每个包含虚函数的类&#xff08;或其派生类&#xff09;会有一个全局唯一的虚表&#xff0c;存储该类所有虚函数的地址3.虚指针&#xff08;vptr&#xff09;&#x…

5 分钟快速入门 Github Actions

GitHub Actions 是 GitHub 官方提供的 CI/CD 解决方案&#xff0c;它内置于 GitHub 平台&#xff0c;用于自动化你的软件构建、测试和部署工作流。&#x1f680; 快速入门 GitHub Actions&#xff1a;自动化你的开发流程 核心概念&#xff1a;理解 Actions 的基石 在开始编写配…