一篇文章讲明白hdu5698百度之星2016round2b第3题

简介: 一篇文章讲明白hdu5698百度之星2016round2b第3题

这题首先是找规律推公式,然后就是组合数学的知识了。

题目是问到第n行第m列的格式有几种方案,我们可以用手算的方法列出当n和m比较小时的所有答案

比如我列出以下88的矩阵

924 462 210 84 28 7 1 0

462 252 126 56 21 6 1 0

210 126 70 35 15 5 1 0

84 56 35 20 10 4 1 0

28 21 15 10 6 3 1 0

7 6 5 4 3 2 1 0

1 1 1 1 1 1 1 0

0 0 0 0 0 0 0 1

矩阵上的数表示从那个位置到最右下角一共有多少种方案。

求每个位置的值也简单,就是把它右下角的所有数加起来即可。

那么,把这个矩阵倒过来看,就是想要的结果矩阵了。

规律也很容易发现,首先,矩阵是对称的,所以我是只考虑m>=n的情况。

然后,可以发现每个位置的数就是一个组合数C(m + n - 4, n - 2)

最后就是求组合数取模了,C(m + n - 4, n - 2) %

然而,多年没做题的我,并不会组合数取模。找了以前的模板,是竹教主写的,看了好半天才明白,等我打完的时候,比赛刚结束。

比赛结束后交了一次,果然a了T_T

以下是代码

/

baidu/win.cpp

Created on: 2016-5-22

Author : ben

/

#include

#include

#include

#include

#include

#include

#include

#include

#include [span style="color: rgba(0, 0, 255, 1)">set

#include

#include

#include [span style="color: rgba(0, 0, 255, 1)">string

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long LL;

LL Ext_gcd(LL a, LL b, LL x, LL y) {

if (b == 0) {

x = 1, y = 0;

return a;

}//代码效果参考:http://www.ezhiqi.com/zx/art_1460.html

LL ret = Ext_gcd(b, a % b, y, x);

y -= a / b x;

return ret;

}

LL Inv(LL a, int m) { ///求除数a对m的逆元;

LL d, x, y, t = (LL) m;

d = Ext_gcd(a, t, x, y);

if (d == 1)

return (x % t + t) % t;

return -1;

}

void work(int n, int m) {

int i;

const int mod = 1000000007;

LL sum = 1;

for (i = n - m + 1; i <= n; i++) {

sum = (LL) i;

sum %= mod;

}

LL tmp = 1;

for (i = 2; i <= m; i++)

tmp = i, tmp %= mod;

sum = Inv(tmp, mod);

sum %= mod;

printf("%I64d\n", sum);

}

int main() {

int n, m;

while (scanf("%d%d", n, m) == 2) {

if (m [span style="color: rgba(0, 0, 0, 1)"> n) {

int tmp = m;

m = n;

n = tmp;

}//代码效果参考:http://www.ezhiqi.com/zx/art_2396.html

work(m + n - 4, n - 2);

}

return 0;

}

相关文章
|
安全 网络安全 数据安全/隐私保护
网络堡垒的构建者:洞悉网络安全与信息安全的深层策略
【4月更文挑战第9天】在数字化时代,数据成为了新的价值核心。然而,随之而来的是日益复杂的网络安全威胁。从漏洞利用到信息泄露,从服务中断到身份盗用,攻击手段不断演变。本文深入剖析了网络安全的关键组成部分:识别和防范安全漏洞、加密技术的应用以及提升个体和企业的安全意识。通过探讨这些领域的最佳实践和最新动态,旨在为读者提供一套全面的策略工具箱,以强化他们在数字世界的防御能力。
|
11月前
|
API 持续交付 开发者
后端开发中的微服务架构实践与挑战
在数字化时代,后端服务的构建和管理变得日益复杂。本文将深入探讨微服务架构在后端开发中的应用,分析其在提高系统可扩展性、灵活性和可维护性方面的优势,同时讨论实施微服务时面临的挑战,如服务拆分、数据一致性和部署复杂性等。通过实际案例分析,本文旨在为开发者提供微服务架构的实用见解和解决策略。
|
存储 人工智能 数据库
|
设计模式 JSON 编解码
Netty使用篇:编解码器
Netty使用篇:编解码器
|
存储 Shell Linux
【Shell 命令集合 系统管理 】Linux 删除用户 userdel 命令 使用指南
【Shell 命令集合 系统管理 】Linux 删除用户 userdel 命令 使用指南
610 2
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Qt6学习笔记四(ui使用、资源文件添加)
Qt6学习笔记四(ui使用、资源文件添加)
498 0
|
安全 Windows
电脑出现No Bootable Device无法开机该怎么办?
本文介绍笔记本电脑出现No Bootable Device错误提示,且无法开机的多种解决办法~
2037 1
电脑出现No Bootable Device无法开机该怎么办?