列表

详情


NC244325. 1919810

描述

贝贝认为1919810是这个世界上除了114514以外,最神奇的数字!于是他便开始研究这个数字,发现这个数字各个数位之间的“增减性“更加奇妙!他认为一个数字序列的“增减性”同1919810,当前仅当,它满足以下全部条件:
  1.  
给定一仅由组成的字符串s,贝贝想知道这个字符串s有多少个子序列的“增减性”同1919810,由于这个答案可能很大,故输出时对取模。

输入描述

仅一行,包含一个字符串

输出描述

仅一行,包含一个整数,表示字符串s有多少个子序列的“增减性”同1919810,结果对取模。

示例1

输入:

1919810

输出:

1

示例2

输入:

19198210

输出:

5

说明:

5个子序列依次为19182101919210191981019198201919821

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 96ms, 内存消耗: 2492K, 提交时间: 2022-11-22 22:47:40

#include<iostream>
using namespace std;
const int mod=1e9+7;
int a[10][10];
int main()
{
    string str;
    cin>>str;
    str=" "+str;
    for(int i=1;i<str.size();i++)
    {
        int t=str[i]-'0';
        a[t][1]++;
        for(int j=7;j>=2;j--)
        {
            if(j==2||j==4)
            {
                for(int k=0;k<t;k++)a[t][j]=(a[t][j]+a[k][j-1])%mod;
            }
            else
            {
                for(int k=t+1;k<=9;k++)a[t][j]=(a[t][j]+a[k][j-1])%mod;
            }
        }
    } 
	int ans=0;
    for(int i=0;i<=9;i++)
    ans=(ans+a[i][7])%mod;cout<<ans<<endl;
    return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 122ms, 内存消耗: 3504K, 提交时间: 2022-10-23 17:52:28

#include<bits/stdc++.h>

using namespace std;
#define int long long

const int mod=1e9+7;
int f[20][20];
signed main()
{
	string s;
	cin>>s;
	int n=s.size();
	s=" "+s;
	for(int i=1;i<=n;i++){
		int t=s[i]-'0';
		f[t][1]++;
		for(int j=7;j>=2;j--){
			if(j==2||j==4){
				for(int k=0;k<t;k++) f[t][j]=(f[t][j]+f[k][j-1])%mod;
			}
			else {
				for(int k=t+1;k<=9;k++) f[t][j]=(f[t][j]+f[k][j-1])%mod;
			}
		}
	}
	int ans=0;
	for(int i=0;i<=9;i++){
		ans=(ans+f[i][7])%mod;
	}
	cout<<ans<<endl;
	return 0;
} 

上一题