链接
题意:
定义一个数的“Reflecion number”,是用9减去它的每一个数位后,再去掉前导0而形成的数,如192的“Reflecion number”是807(9-1=8,9-9=0,9-2=7)。
再定义一个数的“Weight”,它等于这个数自身乘以这个数的“Reflecion number”。
输入l和r 1 < = l < = r < = 1 0 9 {1<=l<=r<=10^9} 1<=l<=r<=109,输出l到r的数中"Weight"的最大值。
分析:
首先我们先看他们乘积发现他们的关系,
一个数x 的Re number 数是什么? 手模一个数 897 ,他的Re NUM为 (9-8)(9-9)(9-7)发现是102他与原数的关系是897+102=999,那么我们就可以直接通过求出其位数然后这么多9减去原数就是原数的Re number,然后我们就可以直接求出结果。
然后我们看看其具有的性质,我们发现答案不是最小的那个数,就是最大的那个数,要不就是5000…中间这个数,然后我们发现我们要先整出最优的一位数。后面就叠加。
///苟利国家生死以,岂因祸福避趋之。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 2e5 + 7;
const int mod = 1e9 + 7;
const double pi = 3.14159265358979;
ll l,r;
ll g(ll x)///求函数
{
ll t = 1;
while (t <= x) t*=10;
return (t-1-x)*x;
}
int main()
{
cin >> l >> r;
ll res = max(g(l),g(r));
ll t = 5;
for(int i=0;i<=9;i++)
{
if (l <= t && t <= r)
res = max(res,g(t));
t*=10;
}
cout << res << endl;
return 0;
}