[HDU 4828] Grids
2015-04-18 23:00
211 查看
Grids
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 562 Accepted Submission(s): 223
[align=left]Problem Description[/align]度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件?
[align=left]Input[/align]
第一行为数据组数T(1<=T<=100000)。
然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。
[align=left]Output[/align]
对于每组数据,输出符合题意的方案数。由于数字可能非常大,你只需要把最后的结果对1000000007取模即可。
[align=left]Sample Input[/align]
2
1
3
[align=left]Sample Output[/align]
Case #1:
1
Case #2:
5
Hint
对于第二组样例,共5种方案,具体方案为:
[align=left]Source[/align]
2014年百度之星程序设计大赛 - 初赛(第一轮)
逆元、
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define ll long long #define N 1000010 int dp ; int exgcd(int a,int b,int& x, int& y) { if(b==0) { x=1; y=0; return a; } int d=exgcd(b,a%b,y,x); y-=a/b*x; return d; } int inv(int a,int MOD) { int x,y; exgcd(a,MOD,x,y); x=(x%MOD+MOD)%MOD; return x; } void init() { int MOD=1000000007; dp[1]=1; dp[2]=2; for(int i=3;i<=N-10;i++) { dp[i]=( (ll)dp[i-1]*(4*i-2)%MOD * (ll)inv(i+1,MOD))%MOD; } } int main() { init(); int T,n,iCase=1; scanf("%d",&T); while(T--) { scanf("%d",&n); printf("Case #%d:\n%d\n",iCase++,dp ); } return 0; }
相关文章推荐
- Hdu 4828 Grids【卡特兰数】
- [hdu 4828]Grids 数论(扩展欧几里得求逆元)
- hdu 4828 - Grids
- hdu_4828_Grids(卡特兰数+逆元)
- 2014百度之星初赛第一轮 HDU 4828 - Grids (卡特兰数 逆元)
- hdu_4828_Grids(卡特兰数+逆元)
- HDU 4828 Grids(卡特兰数)
- hdu 4828 Grids(拓展欧几里得+卡特兰数)
- hdu 4828 Grids(拓展欧几里得+卡特兰数)
- HDU 4828 Catalan+逆元法
- HDU 4828 (卡特兰数+逆元)
- HDU 4828 逆元+catalan数
- hdu 4828 Grids 卡特兰数+逆元
- HDU - 4828 多写几组数就好了;
- HDU 4828 Coder(线段树 + 离散化)
- 杭电4828 Grids(卡特兰数+求逆元)
- hdoj-4828-Grids
- HDU 4828 (卡特兰数+逆)
- [HDOJ4828]Grids(组合数,Catalan)
- Hdoj 4828 Grids