Grids

Grids

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 717    Accepted Submission(s): 296

Problem Description

  度度熊最近很喜欢玩游戏。这一天他在纸上画了一个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种方案,具体方案为:

Source

2014年百度之星程序设计大赛 - 初赛(第一轮)

思路:卡特兰数+费马小定理求逆元;

为啥是卡特兰数,我们把第一行看成是入栈,第二行看成是出栈,那么观察下1只能放在第一,接下来我们需要放2,2可以放在2个位置,1.放在1的下边,那么此时3就只能放在第一行的第二个,这就表示1出栈了,那么3需要进栈,2.放在第一行的第二个的话,那么3可以放在1的下端,也可以放在第一行的第3个.....

那么我们从中可以知道只要队列不空那么当前的数就可以放在下边,并且是下边没放的第一个,这样后来的数大,就保证了升序合法,同样放上面也是这个原则,所以这个就和火车入栈出栈一样,是卡特兰数的应用。然后递推下卡特兰数,取模时费马小定理求下逆元即可。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<string.h>
 5 #include<queue>
 6 #include<stack>
 7 #include<set>
 8 #include<math.h>
 9 using namespace std;
10 typedef long long LL;
11 const int N=1e9+7;
12 LL dp[1000005];
13 LL quick(LL n,LL m);
14 int main(void)
15 {
16         int i,j,k;
17         dp[1]=1;
18         dp[2]=2;
19         dp[3]=5;
20         for(i=4; i<=1000000; i++)
21         {
22                 dp[i]=dp[i-1]*(4*i-2)%N;
23                 dp[i]=dp[i]*quick((LL)(i+1),N-2)%N;
24         }
25         scanf("%d",&k);
26         int s;
27         int t;
28         for(s=1; s<=k; s++)
29         {
30                 scanf("%d",&t);
31                 printf("Case #%d:\n",s);
32                 printf("%lld\n",dp[t]);
33         }
34         return 0;
35 }
36 LL quick(LL n,LL m)
37 {
38         LL ak=1;
39         while(m)
40         {
41                 if(m&1)
42                 {
43                         ak=ak*n%N;
44                 }
45                 n=(n*n)%N;
46                 m/=2;
47         }
48         return ak;
49 }
时间: 2024-10-20 18:00:08

Grids的相关文章

hdu 4828 Grids(拓展欧几里得+卡特兰数)

题目链接:hdu 4828 Grids 题目大意:略. 解题思路:将上一行看成是入栈,下一行看成是出栈,那么执着的方案就是卡特兰数,用递推的方式求解. #include <cstdio> #include <cstring> typedef long long ll; const int N = 1000005; const ll MOD = 1e9+7; ll dp[N]; ll extendGcd(ll a, ll b, ll& x, ll& y) { if (

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆

kuangbin OJ 1217-- Operations on Grids(YY)(好题)

1217: Operations on Grids Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 89  Solved: 20 [Submit][Status][Web Board] Description 你有一个 9 位数字串,现在你把这个数字的每一位填到 3 × 3 格子上.如果数 字是 123456789,那么填到 3 × 3 格子上会得到: 123 456 789 现在你可以对这 3 × 3 格子做四种操作: 现在给你这个 9 位数字串

ExtJS笔记 Grids

参考:http://blog.csdn.net/zhangxin09/article/details/6885175 The Grid Panel is one of the centerpieces of Ext JS. It's an incredibly versatile component that provides an easy way to display, sort, group, and edit data. Grid 面板为 Ext JS 的大头核心之一.它是一个通用性很强

百度之星2014初赛 - 1002 - Grids

先上题目: Grids Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 度度熊最近很喜欢玩游戏.这一天他在纸上画了一个2行N列的长方形格子.他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案.不过画

HDU4828 Grids 2014百度之星初赛题解

看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2n)! / (n+1) * (n)!*n!; 那么Catalan(n-1) = (2(n-1))! / n * (n-1)!(n-1)!; 然后两者相除就得到:Catalan(n) = (4*n-2) / (n+1) (公式1)//这个就是递归的终极公式了. 一般使用动态规划的递推公式是:Catal

HDU 4828 Grids

这道题我做了很久,推出来一个过程,但是那样做是n^2的复杂度,这道题做不了.后来,上网上搜了一下题解,才发现这个原来叫做卡特兰数...真心给跪了,到底我是有多无知啊!!  还有一个递推公式,不,应该说有很多,我选择了一个,不,是除题解的那人选了一个最好用的. 不光是这样,我还终于明白了逆元的终极奥义.原来他是用来抵消运算的,或者说是换了一种形式,变加为减,变除为乘.说到乘法逆元,尤其是求模的逆元,当然少不了ex_gcd()了. 下面的是代码 #include <iostream> #inclu

Customer segmentation – LifeCycle Grids, CLV and CAC with R(转)

We studied a very powerful approach for customer segmentation in the previous post, which is based on the customer’s lifecycle. We used two metrics: frequency and recency. It is also possible and very helpful to add monetary value to our segmentation

Customer segmentation – LifeCycle Grids with R(转)

I want to share a very powerful approach for customer segmentation in this post. It is based on customer’s lifecycle, specifically on frequency and recency of purchases. The idea of using these metrics comes from the RFM analysis. Recency and frequen