CF86A Reflection (思维)

链接

题意:

定义一个数的“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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值