Bootstrap

子2023

0子2023 - 蓝桥云课

问题描述

小蓝在黑板上连续写下从1到2023之间所有的整数,得到了一个数字序列:S = 12345678910111213...20222023。小蓝想知道S中有多少种子序列恰好等于2023?

以下是3种满足条件的子序列(用中括号标识出的数字是子序列包含的数字):

  1. 1[2]34567891[0]111[2]1[3]141516718192021223...
  2. 1[2]34567891[0]111[2]131415161718192021222[3]...
  3. 1[2]34567891[0]111213141516171819[2]021222[3]...

注意以下是不满足条件的子序列,虽然包含了2、0、2、3四个数字,但是顺序不对:

  1. [1][2]345678910111[2]131415161718192[0]21222[3]...

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

思路:

常见的dp思路,记录子序列出现的次数

代码如下:

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
ll dp[5];
int main()
{
    string s;
    for(ll i = 1 ; i <= 2023 ; i++)
    {
        s += to_string(i);
    }
    for(ll i = 0 ; i < s.size() ; i++)
    {
        if(s[i] == '2')
        {
            dp[1]++;
            dp[3] += dp[2];    
        } 
        if(s[i] == '0')
        {
            dp[2] += dp[1];
        }
        if(s[i] == '3')
        {
            dp[4] += dp[3];
        }
    }
    cout << dp[4];
    return 0;
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;