• CF: Long Number


                                                    题目链接


    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        string a;
        cin >> a;
        int f[10];
        for(int i = 1; i <= 9; i++)
            cin >> f[i];
        for(int i = 0; i < n; i++)
        {
            if(f[a[i] - '0'] > (a[i] - '0'))
            {
                int j = i;
                while(j < n && f[a[j] - '0'] >= (a[j] - '0'))  /*这里要注意j的边界问题,至于为什么 >= 见分析1*/
                {
                    a[j] = f[a[j] - '0'] + '0';
                    j++;
                }
                break;
    
            }
        }
        cout << a << endl;
    }
    

    分析1:题目原文中有这么一句“You can perform the following operation no more than once: choose a non-empty contiguous subsegment of digits in aa, and replace each digit xx from this segment with f(x)f(x).”, 谷歌翻译后结果为  “您可以执行以下操作不超过一次:在a中选择一个非空的连续子数字段,并用f(x)替换该段中的每个数字x。” 那么为啥写成上面的形式就不难理解了,替换时只能是比它本身大或者和它本身相等,若比它小就不可以了,另外注意判断的顺序是从前往后。

  • 相关阅读:
    1052: 最大报销额
    1036: 小希的数表
    1050: 找出直系亲属
    1048: 导弹防御系统
    1051: 魔咒词典
    以大数据眼光欣赏唐人文墨(一)
    Java 内部类详解
    那些“不务正业”的IT培训公司
    Brackets 前端编辑器试用
    Emmet 快速编写html代码
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11143775.html
Copyright © 2020-2023  润新知