CF86A 题解
CF86A 题解
题意
求 rmaxx=lf(x),f(x)=(99⋯9⏟log10x+1个9−x)×x。
思路
看了看题目,用我们聪明的大脑一想,f(x)=(10log10x+1−1−x)×x=−x2−x+x×10log10x+1,仔细一想这不就是一个开口向下的二次函数吗?于是,题目就是二次函数最值问题。
设 cnt=10log10x+1−1
所以,函数对称轴就为 cnt2。
因为函数开口向下,所以:
- 当 x∈(−∞,cnt2],函数单调递增。
- 当 x∈[cnt2,+∞),函数单调递减。
- 当 x=cnt2 时,函数有最大值。
于是,求函数图像就可以分为以下三种情况:
- 当 l⩽r<cnt2,则对于任意 x,有 f(x) 单调递增,所以有当 x=r 时,有函数最大值 f(r)。
- 当 cnt2<l⩽r,则对于任意 x,有 f(x) 单调递减,所以有当 x=l 时,有函数最大值 f(l)。
- 当 l⩽cnt2⩽r,则当 x=cnt2 时,函数有最大值。
于是,这题就做出来了。
总结
- 二次函数最值问题。
- 单调性。
- 分类讨论。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long l,r,wr,cnt;
int main(){
scanf("%lld %lld",&l,&r);
wr=log10(r);
cnt=pow(10,wr+1)-1;
if(l>=cnt/2) printf("%lld",l*(cnt-l));//f(l)处值最大
else if(r<cnt/2) printf("%lld",r*(cnt-r));//f(r)处值最大
else printf("%lld",cnt/2*(cnt-cnt/2));//对称轴处f(x)最大,输出对称轴f(x)的值
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现