AT_abc180_d 题解

洛谷链接&Atcoder 链接

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

1|0题目简述

现有 STREXP 两个变量,初始化分别为 X0,可对变量 STR 做以下两种操作:

  1. STRA,并将 EXP 自加 1

  2. STR 加上 B,并将 EXP 自加 1

STR<Y 的情况下,求 EXP 的最大值。

2|0思路

本蒟蒻读完题目后:“贪心!”

那么贪心该怎么贪?通过题意我们很容易想到,无论是执行第一个造作还是第二个操作对 EXP 的影响不变,故就需要我们衡量操作一或二的优势。

如执行操作一比执行操作二更优,则有:

STR×A<STR+B

同时需满足:

STR×A<Y

而自信提交的我结果就可想而知了,重新看了一遍题目,发现数据范围:1X<Y10182A101B109

那么 STR×A 就有爆 long long 的可能,通过简单的不等式移项可变化为:

STR<Y/A

这样操作一比操作二更优的情况就解决了。又因为贪心思想,当操作二更优时可直接计算还可加多少 B,直接加到 ans 里即可,因为此时再进行操作一必定超过 YSTR×ASTR+B

经过以上分析,即可得到以下代码:

#include<iostream> using namespace std; long long x, y, a, b, ans = 0; // 开 long long int main() { cin >> x >> y >> a >> b; // 输入 while(x < y) { if(x < y / a && x * a < x + b) x *= a, ans ++; // 操作一比操作二更优,防止爆 long long 优化 else break; // 操作二更优 } ans += (y - x - 1) / b; // 计算操作二还可执行多少次 cout << ans << endl; // 输出,换行好习惯 return 0; }

提交记录

The End!!!

提交了 5 次,我崩溃了 qwq。。


__EOF__

本文作者So_noSlack
本文链接https://www.cnblogs.com/So-noSlack/p/17576584.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   So_noSlack  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示