列表

详情


NC18985. 数字权重

描述

小a有一个n位的数字,但是它忘了各个位上的数是什么,现在请你来确定各个位上的数字,满足以下条件:

设第i位的数为ai,其中a1为最高位,an为最低位,K为给定的数字
1. 不含前导0
2.
请你求出满足条件的方案数

输入描述

两个整数N, K

若存在无解的情况,请输出0

输出描述

一个整数表示答案,对109 + 7取模

示例1

输入:

2 3

输出:

6

说明:

满足条件的数有:14, 25, 36, 47, 58, 69

示例2

输入:

2 -3

输出:

7

说明:

满足条件的数有:41, 52, 63, 74, 85, 96, 30

示例3

输入:

4 3

输出:

600

说明:

可能的方案有:1234, 1334

示例4

输入:

4 -3

输出:

700

原站题解

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

Pascal(fpc 3.0.2) 解法, 执行用时: 2ms, 内存消耗: 256K, 提交时间: 2018-10-24 10:51:17

var     r,n,s,x:qword;   k,s1,i,j:longint;
begin
readln(n,k);
s:=1;
n:=n-2;
x:=10;
while 0<n do
  begin
    if n mod 2=1 then
       s:=s*x mod 1000000007;
    n:=n div 2;
  x:=(x*x) mod 1000000007;
  end;
for i:=1 to 9 do
 if (i+k<=9)and(i+k>=0) then s1:=s1+1;
writeln(s*s1 mod 1000000007);
end.

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 484K, 提交时间: 2018-09-12 19:12:35

#include<cstdio>
#define ll long long
const int mod=1e9+7;
inline ll pow(ll x,ll y){
	ll s=1;
	while(y){if(y&1) s=s*x%mod;x=x*x%mod,y>>=1;}
	return s;
}
int main(){
	ll n,k;
	scanf("%lld%lld",&n,&k);
	if(k>8||k<-9) return !printf("0");
	printf("%d",(k>0?9-k:k+10)*pow(10,n-2)%mod);
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 348K, 提交时间: 2019-02-14 22:15:41

#include<stdio.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
long long n,k,ans,a;
const int p=1e9+7;
int main(){
	scanf("%lld%lld",&n,&k);
	fo(i,1,9) if (0<=i+k&&i+k<=9) ans++;
	a=10;
	n-=2;
	while (n){
		if (n&1) ans=ans*a%p;
		a=a*a%p;
		n>>=1;
	}
	printf("%lld\n",ans);
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 328K, 提交时间: 2023-04-04 14:56:16

#include<stdio.h>
long long n,k,ans,a,p=1e9+7;
int main()
{
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=9;i++)
		if (0<=i+k&&i+k<=9) ans++;
	a=10,n-=2;
	while (n)
	{
		if (n&1) ans=ans*a%p;
		a=a*a%p;
		n>>=1;
	}
	printf("%lld\n",ans);
	return 0;
}

Python3(3.9) 解法, 执行用时: 18ms, 内存消耗: 2824K, 提交时间: 2021-02-01 20:25:35

N, K = list(map(int, input().split()))

MOD = 1000000007
if 0 <= K <= 9:
    print(((9 - K) * pow(10, N - 2, MOD)) % MOD)
elif -8 <= K <= -1:
    print(((10 + K) * pow(10, N - 2, MOD)) % MOD)
else:
    print(0)

Python(2.7.3) 解法, 执行用时: 17ms, 内存消耗: 2808K, 提交时间: 2018-09-13 08:43:37

MOD = 1000000007
N, K = map(int, raw_input().split())
if 0 <= K <= 9:
    print ((9 - K) * pow(10, N - 2, MOD)) % MOD
elif -8 <= K <= -1:
    print ((10 + K) * pow(10, N - 2, MOD)) % MOD
else:
    print 0

上一题