Beautiful Numbers

F-Beautiful Numbers_牛客竞赛数学专题班简单排列和组合(排列组合问题、阶乘、组合数) (nowcoder.com)
给你两个数字 a和 b。一个数是由 a,b两种数字构成,那么这个数是good数;这个数的每一位加起来构成新的一个数,并且新数也是一个good数,那么称原数为excell。

求 n位数中有多少个数是excell,输 mod 109+7 后的结果。

注意, n位数不能有前导0。

1e6=>n>=1

这题可以先找出n位数中a和b有多少个才符合excell数,假设有i个a可以符合excell,便可求C_{n}^{i}\textrm{}得到所有的i个a的excell数

答案就是\sum C_{n}^{i}\textrm{} (当i*a+b*(n-i)也是一个good数的时候i成立)

代码如下:

#include<stdio.h>
#define ll long long
const int mod=1e9+7;
ll q_pow(ll a,ll b)  //快速幂求逆元
{
    ll t=1;
    while(b)
    {
        if(b&1)t=t*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return t;
}
ll C(ll a,ll b)        //求组合数
{
    ll t=1;
    for(int i=a;i>(a-b);i--)
    {
        t=t*i%mod;
    }
    ll m=1;
    for(int i=2;i<=b;i++)
        m=m*i%mod;
    return t*q_pow(m,mod-2);
}
int main()
{
    ll a,b,c,res=0;
    scanf("%lld%lld%lld",&a,&b,&c);
    for(int i=0;i<=c;i++)
    {
        ll t=a*i+b*(c-i);
        int flag=1;
        while(t)  //判断是否为good数
        {
            int k=t%10;
            t/=10;
            if(k==a)continue;
            if(k==b)continue;
            flag=0;
            break;
        }
        if(flag) 
        {
            res=(res+C(c,i))%mod;
        }
    }
    printf("%lld",res);
}

用C语言解决下列问题:Kirill wants to weave the very beautiful blanket consisting of n×m of the same size square patches of some colors. He matched some non-negative integer to each color. Thus, in our problem, the blanket can be considered a B matrix of size n×m consisting of non-negative integers. Kirill considers that the blanket is very beautiful, if for each submatrix A of size 4×4 of the matrix B is true: A11⊕A12⊕A21⊕A22=A33⊕A34⊕A43⊕A44, A13⊕A14⊕A23⊕A24=A31⊕A32⊕A41⊕A42, where ⊕ means bitwise exclusive OR Kirill asks you to help her weave a very beautiful blanket, and as colorful as possible! He gives you two integers n and m . Your task is to generate a matrix B of size n×m , which corresponds to a very beautiful blanket and in which the number of different numbers maximized. Input The first line of input data contains one integer number t (1≤t≤1000 ) — the number of test cases. The single line of each test case contains two integers n and m (4≤n,m≤200) — the size of matrix B . It is guaranteed that the sum of n⋅m does not exceed 2⋅105 . Output For each test case, in first line output one integer cnt (1≤cnt≤n⋅m) — the maximum number of different numbers in the matrix. Then output the matrix B (0≤Bij<263) of size n×m . If there are several correct matrices, it is allowed to output any one. It can be shown that if there exists a matrix with an optimal number of distinct numbers, then there exists among suitable matrices such a B that (0≤Bij<263) .
03-10
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值