您的位置:首页 > 其它

HDU 4828 Catalan+逆元法

2015-09-12 23:09 253 查看
题意简述

给定一个2∗N的矩阵,把1到2N这些数依次放进去,求使每行每列都递增的方案数(对109+7取模)。

分析

扯一句——本题来自2014年百度之星程序设计大赛 - 初赛(第一轮),据说也是许多IT公司的面试题。

将在第一行放数视为入栈,将在第二行放数视为出栈,即可保证两个递增条件。

问题转化为求第n项Catalan数。

Catalan数入门

逆元法入门

代码实现

const
mo=1000000007;
var
i,n,k,cases,ans,tmp:longint;
fac:array[0..2000000] of int64;

function ni(t:longint):int64;
var
k:longint;
begin
if t=1 then begin ni:=1;exit;end;
k:=mo div t+1;
ni:=k*ni(k*t-mo) mod mo;
end;

begin
fac[0]:=1;
for i:=1 to 2000000 do fac[i]:=fac[i-1]*i mod mo;
readln(cases);
for i:=1 to cases do
begin
readln(n);tmp:=ni(fac
);
ans:=fac[2*n]*tmp mod mo*tmp mod mo*ni(n+1) mod mo;
writeln('Case #',i,':');
writeln(ans);
end;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: