Codeforces Round #277.5 (Div. 2), problem: (C) Given Length and Sum of Digits...(贪心)【贪心策略:最小值与最大值】
发布日期:2021-06-29 14:25:55 浏览次数:2 分类:技术文章

本文共 669 字,大约阅读时间需要 2 分钟。


题目大意

给你m,s,分别代表构成数字的长度和值。

例如m=2,s=15,这样可以构成69 , 78,87,96…等等数字。我们只用求出最小的这种数和最大的这种数就行了。


题解

对于给定的m和s 需要进行特殊情况处理-> 如果只有1位数 位数和为0的话 最小和最大都是0 满足条件 但是位数和为0的其它情况就不满足 另外,当位数乘以9之后的结果如果比总和还要小的话也是不满足的

对于最小值的情况,贪心策略如下:尽可能让前面小,不过注意前导0的情况,特殊处理一下就好了 然后对于当前位的数字 就将后面的数字假装填满了9

然后对于最大值的情况,贪心策略如下:从首位开始能放9的直接放9,不能放9的话就取剩下的值即可

#include
#define endl '\n'using namespace std;int m,s;string smin,smax;int main(){
ios::sync_with_stdio(false); cin.tie(0); cin>>m>>s; if(m==1&&s==0){
cout<<0<<" "<<0<
9) cc=9; else cc=ans; ch='0'+cc; smax+=ch; ans-=cc; } cout<
<
学如逆水行舟,不进则退

转载地址:https://chocolate.blog.csdn.net/article/details/102389777 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:HNUCM_入门级题库 (练习1)【题解】
下一篇:[计算机图形学经典算法] 如何处理多边形的水平边?【扫描线算法+个人解答(非官方正解)】

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月13日 04时21分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章