列表

详情


NC229274. Beautiful Numbers

描述

给你两个数字。一个数是由两种数字构成,那么这个数是good;这个数的每一位加起来构成新的一个数,并且新数也是一个good数,那么称原数为excell。
位数中有多少个数是excell,输出 后的结果。
注意,位数不能有前导0。

输入描述

第一行包含三个整数

输出描述

输出一个整数。表示答案 后的结果。

示例1

输入:

1 3 3

输出:

1

说明:

满足条件的三位数只有1个:111。

示例2

输入:

2 3 10

输出:

165

原站题解

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

C++ 解法, 执行用时: 20ms, 内存消耗: 16060K, 提交时间: 2022-02-09 16:20:57

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 9000002
#define p 1000000007
ll a,b,n,i,ans,jc[N],inv[N];
ll ksm(ll x,ll k){
	if(!k) return 1;
	ll t=ksm(x,k/2);
	if(k&1) return t*t%p*x%p;
	return t*t%p;
}
bool ck(ll x){
	while(x){
		if(x%10!=a&&x%10!=b) return false;
		x/=10;
	}
	return true;
}
int main(){
	scanf("%lld%lld%lld",&a,&b,&n);
    jc[0]=1;
	for(i=1;i<=n;i++)
	jc[i]=jc[i-1]*i%p;
	inv[n]=ksm(jc[n],p-2);
	for(i=n-1;i>=0;i--)
	inv[i]=inv[i+1]*(i+1)%p;
	for(ll i=0;i<=n;i++)
	if(ck(i*(b-a)+a*n)) ans=(ans+jc[n]*inv[i]%p*inv[n-i]%p)%p;
	printf("%lld",ans);
}

上一题