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;
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 逻辑运算符Python_逻辑运算符的优先级

    逻辑运算符Python_逻辑运算符的优先级#练习1:定义一个整数变量age,编写代码判断年龄是否正确age=180#要求人的年龄在0~120之间#if0<=age<=120:#新语法ifage>=0andage<=120:print(“年龄正确”)else:print(“年龄不正确”)…

  • pcanywhere设置主控端_redis修改端口

    pcanywhere设置主控端_redis修改端口  有些防火墙只允许一个pcAnywhere被控端使用一个IP端口。而防火墙后面的其它pcAnywhere被控端必须使用另外的端口。希望知道如何更改这些端口。   更改pcAnywhereIP端口需要编辑Windows注册表。如果需要频繁的执行此操作,创建.reg文件是最安全也是最方便的更改方法。尤其对于那些可能需要连接_blank”>防火墙后多个被控端的主控端而

  • 数据结构与算法(1)

    数据结构与算法(1)

    2021年11月12日
  • 全球Telematics产业成长渐趋理性

    全球Telematics产业成长渐趋理性

  • 什么是分区容错性?[通俗易懂]

    什么是分区容错性?[通俗易懂]这个回答我觉得一个知乎上的老哥说的特别好,我把他的话引用过来。原回答地址:https://www.zhihu.com/question/54105974一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。提高分区容忍性的办法就是一个数据项复制到多个节点.

  • oracle数据库connectionstring,oracle数据库 connectionstring

    oracle数据库connectionstring,oracle数据库 connectionstringC#Oracle连接与修改1、连接Oracle,并可以将数据库的数据显示在GridControl上stringConnectionString=”DataSource=数据库名;UserId=用户名;Password=密码;IntegratedSecurity=no;”;Oracle…文章衣舞晨风2014-01-08884浏览量C#Oracle连接与修改1、连接Oracl…

发表回复

您的电子邮箱地址不会被公开。

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