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)