列表

详情


NC218217. 不降数

描述

我们定义一个正整数是不降数,当且仅当它的各位数字从高位到低位单调不降。

举个栗子,1111 112245 都是不降数,而 11221 不是。

请你求出恰好有 n 位的不降数的个数。这个数也许会很大,请对 100019 取模。

输入描述

第一行一个数字 n,代表数字的位数

输出描述

一行一个整数,代表所求的数字个数。

示例1

输入:

1

输出:

9

示例2

输入:

2

输出:

45

原站题解

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

C++(clang++11) 解法, 执行用时: 9ms, 内存消耗: 508K, 提交时间: 2021-05-06 23:01:01

#include<iostream>
using namespace std;
const int M=100019;
int n,a[]={1,1,1,1,1,1,1,1,1};
int main(){
	scanf("%d",&n);
	n%=M;
	for(int i=1;i<=n;i++)
		for(int j=1;j<9;j++) a[j]=(a[j]+a[j-1])%M;
	printf("%d\n",a[8]);
return 0;
} 

C(clang11) 解法, 执行用时: 6ms, 内存消耗: 360K, 提交时间: 2021-04-10 00:11:47

#include<stdio.h>
int w[10];
int main()
{
	int i,j,n,sum=0,l,p;
	scanf("%d",&n);
  n=n%100019;
	for(i=1;i<=9;i++)w[i]=i;
	for(i=2;i<=n;i++)
	for(j=1;j<=9;j++){
		w[j]=(w[j]+w[j-1])%100019;
	}
printf("%d",w[9]);
}

pypy2(pypy2.7.13) 解法, 执行用时: 38ms, 内存消耗: 25716K, 提交时间: 2021-04-09 20:52:03

n=int(input())
x=int(1)
y=int(1)
for i in range(n+1,n+9):
    x=int(x*(int(i)))
for i in range(int(2),int(9)): 
    y=int(y*(int(i)))
x=x/y
print((int)(x%(int(100019))))

Python3(3.9) 解法, 执行用时: 35ms, 内存消耗: 6840K, 提交时间: 2021-04-09 22:04:53

from math import comb
n=int(input())
print(comb(n+8,8)%100019)

上一题