试题 A: 子 2023


本题总分:5 分

【问题描述】
小蓝在黑板上连续写下从 1 到 2023 之间所有的整数,得到了一个数字序列:
S = 12345678910111213 . . . 20222023。
小蓝想知道 S 中有多少种子序列恰好等于 2023?
提示,以下是 3 种满足条件的子序列(用中括号标识出的数字是子序列包含的数字):
1[2]34567891[0]111[2]1[3]14151617181920212223…
1[2]34567891[0]111[2]131415161718192021222[3]…
1[2]34567891[0]111213141516171819[2]021222[3]…
注意以下是不满足条件的子序列,虽然包含了 2、0、2、3 四个数字,但是顺序不对:
1[2]345678910111[2]131415161718192[0]21222[3]…

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

#include<iostream>
#include <vector>
using namespace std;

string s1;

long long dp[6985][4];

string gets(int i)
{
	string s2 = "";
	while (i)
	{
		s2 += i % 10 + '0';
		i /= 10;
	}
	string temp = "";


	for (int i = s2.length()-1; i >=0; i--)
	{
		temp += s2[i];
	}
	return temp;
}

int main()

{
	for (int i1 = 1; i1 <= 2023; i1++)
	{
		s1 += gets(i1);
	}


	for (int i = 1; i < s1.length(); i++)
	{
		if (s1[i] == '2')
		{
			dp[i][0] = dp[i - 1][0] + 1;
			dp[i][2] = dp[i - 1][2] + dp[i - 1][1];


			dp[i][1] = dp[i - 1][1];
			dp[i][3] = dp[i - 1][3];
		}
		else if (s1[i] == '0')
		{
			dp[i][1] = dp[i - 1][0] + dp[i-1][1];


			dp[i][0] = dp[i - 1][0];
			dp[i][2] = dp[i - 1][2];
			dp[i][3] = dp[i - 1][3];

		}
		else if (s1[i] == '3')
		{
			dp[i][3] = dp[i - 1][3] + dp[i-1][2];

			dp[i][0] = dp[i - 1][0];
			dp[i][1] = dp[i - 1][1];
			dp[i][2] = dp[i - 1][2];


		}
		else
		{
			dp[i][0] = dp[i - 1][0];
			dp[i][1] = dp[i - 1][1];
			dp[i][2] = dp[i - 1][2];
			dp[i][3] = dp[i - 1][3];
		}
	}
	
	cout << dp[s1.length() - 1][3] << endl;;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LX很爱吃葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值