ZCMU - 2004: HEX

简介: ZCMU - 2004: HEX

题目链接:点击打开链接


题目大意:给出一个类似杨辉三角的菱形,求给定坐标的数值是多少。不难看出,每一个位置的数字就是(左上,右上,正上)这三个数的和。


解题思路:

从(1,1)走到(A,B)一共有多少总方案。

可以左下走(1,0),正下走(2,1),右下走(1,1)。


假设左下走了 x 次,正下走 y 次,右下走 z 次。则得到方程:

(1,1)+ x*(1,0)+ y*(2,1)+ z*(1,1)==(a,b)

求得:

x + 2*y + z == a - 1;

y + z == b - 1;

再得:

x+y=a-b; y+z=b-1; ( y<=min(a-b,b-1) )枚举y。


那么左下走了 x 次,正下走 y 次,右下走 z 次这样的走法有多少总方案,其实就是一个组合数。

在(x+y+z)中选出 x 次走左下那么就是C(x+y+z,x),在剩下的(y+z)中选出 y 次走正下就是C(y+z,y),最后剩下的就是走 z 次右下C(z,z)==1。

所以方案数就是C(x+y+z,x)* C(y+z,y)==(x+y+z)!/(x!*y!*z!)==(a-y-1)!/((a-b-y)!*y!*(b-y-1)!)。然后枚举 y 全部加起来,结果再乘法逆元下即可。


AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a)
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll arr[100100],qrr[100100];
ll qpow(ll a)
{
    ll b=mod-2,ans=1; a%=mod;
    while(b)
    {
        if(b&1) ans=ans*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return ans;
}
void init()
{
    arr[0]=qrr[0]=1;
    for(int i=1;i<100100;i++) arr[i]=arr[i-1]*i%mod;
    for(int i=1;i<100100;i++) qrr[i]=qpow(arr[i]);
}
int main()
{
    init();
    ll a,b;
    while(~scanf("%lld%lld",&a,&b))
    {
        ll ta=a-b, tb=b-1, minn=min(ta,tb), ans=0;
        for(ll y=0; y<=minn; y++)
            ans=(ans+arr[a-y-1]*qrr[y]%mod*qrr[a-b-y]%mod*qrr[b-1-y]%mod)%mod;
        printf("%lld\n",ans);
    }
    return 0;
}


目录
相关文章
HEX编码
HEX编码
112 0
|
9月前
|
算法 Java 索引
Byte Hex CRC计算笔记
Byte Hex CRC计算笔记
103 0
|
算法 数据格式 XML
浅谈Hex编码算法
一、什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示。   二、作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节   三、应用场景 在XML,JS...
1768 0
|
编解码 Python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128) 最近在用Python处理...
2179 0
|
编解码
UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe6 in position 0: ordinal not in range(128)
2017-03-16 11:23:29.601 1238 ERROR nova.compute.manager [instance: 3f195047-250a-4eb5-8da0-63bea6e2672c] Traceback (most recent call last):2017-03-16 11:23:29.
1362 0
|
编解码
&#39;ascii&#39; codec can&#39;t decode byte 0xe6 in position 0: ordinal not in range(128)
No valid host was found. There are not enough hosts available 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)  
1288 0
ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)
chr(9) tab空格       chr(10) 换行      chr(13) 回车        Chr(13)&chr(10) 回车换行       chr(32) 空格符       chr(34) 双引号       chr(39) 单引号 chr(33) !        chr(...
1460 0
|
C# 数据安全/隐私保护
数据加密标准(DES)的C#实现(3)--(将BitConverter.ToString的结果转回byte[])
/**//* * 数据加密标准(DES)的C#实现(3) * 将BitConverter.ToString的结果转回byte[] *  * 采用随机的密钥Key和初始化向量IV加密 * 使用随机密码的好处:系统不会产生弱密钥 * 备注:本例与《数据加密标准(DES)的C#实现(2)》本质相同,只是采用BitConverter.
897 0

热门文章

最新文章