HDU 4828 (卡特兰数+逆)

HDU 4828 (卡特兰数+逆)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

HDU 4828 Grids

思路:能够转化为卡特兰数,先把前n个人标为0。后n个人标为1。然后去全排列,全排列的数列。假设每一个1的前面相应的0大于等于1,那么就是满足的序列,假设把0看成入栈,1看成出栈。那么就等价于n个元素入栈出栈,求符合条件的出栈序列,这个就是卡特兰数了。

然后去递推一下解,过程中须要求逆元去计算
代码:

#include <stdio.h>
#include <string.h>

const int N = 1000005;
const long long MOD = 1000000007;

long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
    if(a == 0 && b == 0) return -1;
    if(b == 0){x = 1; y = 0; return a;}
    long long d = extend_gcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

long long mod_reverse(long long a, long long n)
{
    long long x,y;
    long long d = extend_gcd(a, n, x, y);
    if(d == 1) return (x % n + n) % n;
    else return -1;
}

int t, n;
long long Catalan[N];


int main() {
    Catalan[1] = Catalan[2] = 1;
    for (int i = 3; i < N; i++) {
    long long tmp = mod_reverse((long long) i, MOD);
    Catalan[i] = Catalan[i - 1] * (4 * i - 6) % MOD * tmp % MOD;
    }
    int cas = 0;
    scanf("%d", &t);
    while (t--) {
    scanf("%d", &n);
    printf("Case #%d:\n", ++cas);
    printf("%lld\n", Catalan[n + 1]);

    }
    return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117700.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SVM解释:五、SMO算法

    SVM解释:五、SMO算法SMO算法是JohnC.Platt在1998年提出的。论文的题目是”SequentialMinimalOptimization:AFastAlgorithmforTrainingSupportVectorMachines”。它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。当然了,SMO优越性能的背后是其相当复杂的数学推导,所以,我也把这块最…

    2022年6月24日
    23
  • 河北专接本计算机专业课平均分,2019年河北专接本招生数据及通过率分析[通俗易懂]

    河北专接本计算机专业课平均分,2019年河北专接本招生数据及通过率分析[通俗易懂]每天都会有很多的同学咨询小编河北专接本各个专业的通过率,其实对于单科的通过率来说并不能作为你专接本选专业的首要因素,因为专接本的分数充满的随机性,同学们往往会被某专业专业的高通过率所迷惑从而做出错误的选择。那么易学仕小编整理了一下河北专接本2019年的通过率,仅供大家参考!经管类是财经类和管理类,19年刚刚合并为经管类!这个大类一共招收2667人,参加考试达到100分以上的人数是8686人,整体通…

    2022年7月16日
    33
  • c#正则表达式定义「建议收藏」

    c#正则表达式定义「建议收藏」正则表达式(regularexpression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。  列目录时, dir*.txt或ls*.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。  正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文

    2022年10月29日
    0
  • 智慧小区智慧物业管理系统一体化解决方案怎么写_小区物业管理系统界面

    智慧小区智慧物业管理系统一体化解决方案怎么写_小区物业管理系统界面传统物业在管理上不仅成本高,服务质量也很难有所保障。现在很多小区都安装了智能物业管理系统,它将信息手段与现代物业管理工作相结合,帮助物业管理团队及时响应客户需求,降低运营成本,提升服务品质。智慧物业是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,将物业各个单位紧密连接起来,实现数据的融合,建立起高效的联动机制。为业主提供一个安全、便利的智慧化生活环境。会比传统物业,带来更舒适的体验感与满意度。随着物联网不断完善,智能技术几乎渗透到各行各业的众多领域。智能运用的迅速发展将颠覆我们的生

    2022年10月18日
    0
  • void及void指针含义的深刻解析

    void及void指针含义的深刻解析

    2021年12月2日
    43
  • 补码乘法、booth算法、Wallace树

    补码乘法、booth算法、Wallace树补码乘法 booth 算法 Wallace 树补码乘法原理 booth 算法 booth 一位一乘算法 booth 两位一乘算法 Wallace 树补码乘法原理大家都来学习 booth 算法了 那么补码的加法一定了解了 即 X 补 Y 补 X Y 补 X 补 Y 补 X Y 补 X 补 Y 补 X Y 补 那么乘法同样的 我们也想用补码来表示 但是 X 补 Y 补 X Y 补 X 补 Y 补 neq X Y 补 X 补 Y 补 X Y 补 现在我们需要知道补码的定义 对于 n

    2025年6月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号