zoukankan      html  css  js  c++  java
  • Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) B. Maximum Sum of Digits

    传送门

      题目大意就是给一个数c,然后拆成a和b,使得a+b=c,要求使得a的各数位之和+b的各数位之和达到最大。

      我的想法就是可能不能单独考虑a的数位之和或b的数位之和,要综合考虑才能达到最优,先来看ci,ci=ai+b+flag的,这里的flag是前一位(较低位)的进位,存在是0,否则是1,若是ci-flag!=9的时候,ai+bi有2个取值,一种是ai+bi=ci-flag,另外一种是ai+bi=ci-flag+10,明显ai+bi取第二种时对答案的贡献最大,但是第二种的话,会让第i+1位对答案的贡献少1(因为进位了),但是却让第i位对答案的贡献多了10,综合看对答案的贡献净增加了9,所以总的来说第二种做法还是最优的,若是ci-flag=9的时候,ai+bi就不可以等于ci-flag+10了,因为不存在2个个位数相加超过18的,那么就只能取第一种做法了,即ai+bi=ci-flag,那么对答案的贡献就是ci-flag.

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int main()
    {
        ll ans=0;
        int flag=0;
        char s[15];
        scanf("%s",s);
        int len=strlen(s);
        if(len==1)
        {
            printf("%d
    ",s[0]-'0');
            return 0;
        }
        for(int i=len-1;i>=0;i--)
        {
            int tmp=s[i]-'0'-flag;
            if(tmp!=9)
            {
                if(i==0)
                    ans+=tmp;
                else
                    ans+=tmp+10;
                flag=1;
            }
            else
            {
                ans+=9;
            }
        }
        cout<<ans<<endl;
        return 0;
    
    }
    
  • 相关阅读:
    Appium 服务命令行参数
    DC 输入 输出 时钟 PVT设置
    .synopsys_dc.setup编写
    Excel VBA编程常用语句300句
    C# 泛型单例工厂
    C# Winform与JS交互
    SQL分析“聚集索引、非聚集索引”区别
    C# ClassHelper动态创建程序集和类, 添加/删除类属性
    从30个角度对比 PostgreSQL 和 MySQL
    C# 常用类和命名空间
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754844.html
Copyright © 2011-2022 走看看