HDU - 4828 Grids

本文探讨了度度熊如何解决一个数学游戏问题,即在2行N列的格子中放置1到2N的数字,使得每行每列都递增。文章详细解释了使用卡特兰数及其计算公式来快速找到解决方案数量的方法,并通过逆元技巧解决了大数运算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件?

Input

  第一行为数据组数T(1<=T<=100000)。 
  然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。

Output

  对于每组数据,输出符合题意的方案数。由于数字可能非常大,你只需要把最后的结果对1000000007取模即可。

Sample Input

2
1
3

Sample Output

Case #1:
1
Case #2:
5

Hint

对于第二组样例,共5种方案,具体方案为:

卡特兰数

公式:Cn=Cn-1 * ((4*n-2)/(n+1))(不止这一个)

数太大。结合逆元

为什么要利用逆元呢?

在MOD的情况下,  (a*b/c ) %MOD  不能直接 / c 来求,需要找到一个数 inv 使得  inv * c % MOD = 1 。 这样 (a*b / c) % MOD  = (a * b * inv) % MOD;

 然后套用公式,

/*
Cn=Cn-1 * ((4*n-2)/(n+1))
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
#define ll long long
#define maxn 1000005
#define mod 1000000007
ll ans[maxn],t;
int ex_gcd(int a,int b,int &x,int &y)
{//扩展欧几里得
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    int ans=ex_gcd(b,a%b,x,y);
    int temp=x;
    x=y;
    y=temp-a/b*y;
    return ans;
}
int mod_inverse(int a,int m)
{
    int x,y;
    ex_gcd(a,m,x,y);
    return (x%m+m)%m;
    //如果直接求出来是一个负数,那么显然我们要把他转化成正数
}
void get_catalan()
{
    ans[0]=1;
    for(int i=1;i<=maxn;i++)
    {
        ans[i]=((4*i-2)*ans[i-1])%mod*mod_inverse(i+1,mod)%mod;
    }
}
int main()
{
    get_catalan();
    int cnt=0;
    cin>>t;
    while(t--)
    {
        cnt++;
        int n;
        cin>>n;
        cout<<"Case #"<<cnt<<":"<<endl;
        cout<<ans[n]<<endl;
    }return 0;
}

 

杰笛表格 JTable应该是Swing中用的最多的组件。 为了充分发挥JTable的功能,我们引入了一专门为JTable制作的产品叫杰笛表格,它提供了很多和JTable有关的组件和功能。 该产品有许多JTable的子类:从基础的JideTable开始,到CellSpantable,CellStyleTable,SortableTable,然后更先进的TreeTable,PropertyTable和HierarchicaTable。此外,我们建立了许多不同的数据类型CellEditor和CellRenderer,如日期,颜色,插入,字体。过滤也是杰笛表格另一个重要功能。它涵盖不只是JTable,还包括JList和JTree。您务必运行我们提供的演示程序才能体会到我们在该产品上花了多少精力,所有这些都是为了让您能更容易地进一步开发。 功能介绍 界面组件 PropertyGrid - 属性表格,一种两列的JTable,用来显示任何内嵌结构的对象的属性 SortableTable - 排序表,支持多列的排序功能 FilterableTableModel - 可过滤的表模型,支持针对每一列增加过滤功能 HierarchicalTable - 分级表,对表的一行嵌套任何控件作为子控件 row TreeTable - 树形表,联合使用树控件和表控件来显示层次化分级数据 CellSpanTable - 合并单元格,支持单元格的合并功能 CellStyleTable - 多样式单元格,支持每一个单元格自定义风格 JideTable -自动监听表格单元格编辑操作比如在单元格开始编辑之前或者单元格结束编辑之前),支持有效性检查、支持根据单元格内容自动调节表格的行间距和列间距 TableScrollPane - 通过扩展JideScrollPane 组件来实现行列的头,尾使用一个唯一的表数据模型 TableSplitPane - 使用一个唯一的表数据模型来创造几个不同的表格。每一个表格都可以独立定义列头和;列尾的样式 ColorComboBox and ColorChooserPanel - 一套颜色选择控件,从面板选择到组合框,到单元格编辑,支持用户自定义颜色模式 DateComboBox and DateChooserPanel - 一套月份/日期选择控件,从面板选择到组合框,到单元格编辑,支持国际化和本地化(i18n和l10n) AbstractComboBox - 支持用任何控件做弹出式面板 FilterableListModel - 支持列表的过滤功能 FilterableTreeModel - 支持对树模型任何节点的过滤功能s SortableListModel - 支持列表的排序功能 SortableTreeModel - 支持任何树模型每个节点的排序功能 QuickTableFilterField and QuickFilterPane - 简化一个超大型表格查找和过滤的操作步骤,提升效率 QuickListFilterField and QuickTreeFilterField -支持在一个大型的集合或者树的数据域中敏捷查找和过滤 工具类 归一化的编辑/渲染机制(Centralized cell editor and renderer mechanism )- 自定义单元格编辑器并放置在一个地方,然后通过应用程序来使用它 归一化的对象转换机制(Centralized object converter mechanism) -自定义从字符串到任何对象的转换 归一化的对象比较机制(Centralized object comparator mechanism )-自定义对象的比较,并能在排序时被排序表使用 表实用类TableUtils class - 收集一些JTable有用功能的实用类。 集合实用类ListUtils class -收集一些JTable有用功能的实用类 树实用类 -收集一些Jtree有用功能的实用类详细的功能列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值