Description
A number is said to be made up of non-decreasing digits if all the digits to the left of any digit is less
than or equal to that digit. For example, the four-digit number 1234 is composed of digits that are
non-decreasing. Some other four-digit numbers that are composed of non-decreasing digits are
0011, 1111, 1112, 1122, 2223. As it turns out, there are exactly 715 four-digit numbers composed of
non-decreasing digits.
Notice that leading zeroes are required: 0000, 0001, 0002 are all valid four-digit numbers with nondecreasing digits.
For this problem, you will write a program that determines how many such numbers there are with a
specified number of digits.
Input
The first line of input contains a single integer P, (1<=P <= 1000), which is the number of data sets that
follow. Each data set is a single line that contains the data set number, followed by a space, followed
by a decimal integer giving the number of digits N, (1<= N <= 1000000000).
Output
For each data set there is one line of output. It contains the data set number followed by a single
space, followed by the number of N digit values that are composed entirely of non-decreasing digits % 1000000007.
Sample Input
Sample Output
HINT
Source
代码:#include<cstdio>
using namespace std;
int main()
{
int i,n;
long long ti=1,num;
scanf("%d",&n);
for(;n--;ti=1)
{
scanf("%d%lld",&i,&num);
for(int j=1;j<=9;++j)
{
long long temp=num+j;
ti=((ti%1000000007)*(temp%1000000007))%1000000007;
}
ti=(ti*831947206)%1000000007;
printf("%d %lld\n",i,ti);
}
return 0;
}
其中有个关于模运算除法的技巧:
参考了http://mingplusplus.com/blog/?p=43
Assume:
a%b=0
And we want to know:
(a/b)%m (m=1000000007)
It could be easy. However, sometimes:
a=a1*a2 (a1>2^63 and a2>2^63)
Then We typically want to use
(a1%m * a2%m)/(b%m)
That’s where the problem is:
(a/b)%m != (a%m)/(b%m)
So we want to make a form like:
(a*c)%m = (a/b)%m
So that we can simply calculate the answer using:
(a1%m*a2%m*c%m)
If
(c*b)%m==1
Then:
(a/b)%m = (a/b)%m * (c*b)%m
(a/b)%m = (a*c)%m
Then we can calculate it.
Summary, to calculate like this form:
(a/b)%m (m is prime)
We have to find a number “c” so that:
(b*c)%m=1
To make
(a*c)%m=(a/b)%m.