CF86A 题解

CF86A 题解

题意

求 $ \max\limits_{x=l}^{r} f(x),f(x)=(\underbrace{99\cdots9}_ {\log_{10}x+1\text{个}9}-x)\times x
$。

思路

看了看题目,用我们聪明的大脑一想,\(f(x)=(10^{\log_{10}x+1}-1-x)\times x=-x^2-x+x\times10^{\log_{10}x+1}\),仔细一想这不就是一个开口向下的二次函数吗?于是,题目就是二次函数最值问题。

\(cnt=10^{\log_{10}x+1}-1\)

所以,函数对称轴就为 \(\frac{cnt}{2}\)

因为函数开口向下,所以:

  • \(x\in(-\infty,\frac{cnt}{2}]\),函数单调递增。
  • \(x\in[\frac{cnt}{2},+\infty)\),函数单调递减。
  • \(x=\frac{cnt}{2}\) 时,函数有最大值。

于是,求函数图像就可以分为以下三种情况:

  1. \(l\leqslant r<\frac{cnt}{2}\),则对于任意 \(x\),有 \(f(x)\) 单调递增,所以有当 \(x=r\) 时,有函数最大值 \(f(r)\)
  2. \(\frac{cnt}{2}<l\leqslant r\),则对于任意 \(x\),有 \(f(x)\) 单调递减,所以有当 \(x=l\) 时,有函数最大值 \(f(l)\)
  3. \(l\leqslant\frac{cnt}{2}\leqslant r\),则当 \(x=\frac{cnt}{2}\) 时,函数有最大值。

于是,这题就做出来了。

总结

  1. 二次函数最值问题。
  2. 单调性。
  3. 分类讨论。

代码

#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;
}
posted @ 2025-01-29 15:35  naroto2022  阅读(7)  评论(0)    收藏  举报