Codeforce 57C Array
2 seconds
256 megabytes
standard input
standard output
Chris the Rabbit has been interested in arrays ever since he was a child. At the moment he is researching arrays with the length of n, containing only integers from 1 to n. He is not good at math, that's why some simple things drive him crazy. For example, yesterday he grew keen on counting how many different beautiful arrays there are. Chris thinks that an array is beautiful if it meets one of the two conditions:
- each elements, starting from the second one, is no more than the preceding one
- each element, starting from the second one, is no less than the preceding one
Having got absolutely mad at himself and at math, Chris came to Stewie and Brian to ask them for help. However, they only laughed at him and said that the answer is too simple and not interesting. Help Chris the Rabbit to find the answer at last.
The single line contains an integer n which is the size of the array (1 ≤ n ≤ 105).
You must print the answer on a single line. As it can be rather long, you should print it modulo 1000000007.
2
4
3
17
/***
题意:有一个长度为n的数字串,其中的数字都是1~n的数字,问:有多少种串能够满足下列两种情况:
非降序列;
非升序列。
两者等价,可以求出一种,然后另外一种就求出来了。 高中就能做出来,现在反而不会了= =!
借用模型,求出组合数学的公式,用数论的方法进行求解,如此即可。难点是数论上的方法求解。 先说模型:
高为1 ,长为2n-1的矩形,由1*1的小方格排列而成,然后,我们选取其中n-1个小方格,放上空格标志,
在剩下没有标志的空格里,记录从第一个小方格到当前小方格中,有多少个空格标志,将数量记录在方格中,
如此,满足非降序列条件的序列便可以得出,只不过,数字的范围是从0 ~ n-1,与从1 ~ n是等价的。 这种序列可以得到C(2n-1,n)个,同样的,满足非升序列的种数也是C(2n-1,n),
但是,两种序列中有重复的:序列为0 0 0 0 0 0 …… 0,~ ,n-1,n-1,n-1,n-1,n-1,n-1,……n-1,
共有n中,
因此,
最终答案是,2C(2n-1,n)-n C(2n-1,n)mod p的求解: ((2n-1)!/n!*n!)mod p
先求n!*n!关于p的逆元m,
=((2n-1)!mod p)*(m mod p) mod p 而求n!*n!的逆元,可以根据费马小定理:a^(p-1) mod p = 1 (mod p),成立的充分必要条件是a与p互质,
因此,当p为质数时(充分条件),等式仍成立。 逆元m满足 (n!*n!*m)mod p = 1恒成立,
已知的 p=1000000007,是质数,因此,可以根据费马小定理得到(n!*n!)*(n!*n!)^(p-2) mod p = 1,
因此,m= (n!*n!)^(p-2).
***/ #include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <vector>
#include <bitset>
#include <cstdio>
#include <string>
#include <numeric>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional> using namespace std;
typedef long long ll;
typedef unsigned long long ull; int dx[4]= {-1,1,0,0};
int dy[4]= {0,0,-1,1}; //up down left right
bool inmap(int x,int y,int n,int m)
{
if(x<1||x>n||y<1||y>m)return false;
return true;
}
int hashmap(int x,int y,int m)
{
return (x-1)*m+y;
} #define eps 1e-8
#define inf 0x7fffffff
#define debug puts("BUG")
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#define lowbit(x) (-x)&x #define rep(i,n) for(int i=0;i<n;i++)
#define ll long long
#define mod 1000000007 int n;
ll res,denom; ll power(ll x,ll y)
{
ll ans = 1;
while(y)
{
if(y&1)
ans = ans * x %mod;
x = x*x%mod;
y>>=1;
}
return ans;
} int main()
{
cin>>n;
res = 1;
denom=1;
for(int i=2*n; i>n; i--)//2n*……*n+1
res = res * i%mod;
for(int i=1; i<=n; i++)//n!
denom = denom*i%mod;
denom = power(denom,(ll)mod-2);//变除为乘,求逆元
cout<<(res*denom-n+mod)%mod<<endl;
return 0;
}
Codeforce 57C Array的更多相关文章
- Codeforces 57C Array dp暴力找到规律
主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2* ...
- CodeForces 57C Array 组合计数+逆元
题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数 ...
- CodeForce 439C Devu and Partitioning of the Array(模拟)
Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...
- Codeforce 1175 D. Array Splitting
新鲜热乎的题 Codeforce 1175 D. 题意:给出一个长度为$n$的序列$a$,你需要把它划分为$k$段,每一个元素都需要刚好在其中一段中.分好之后,要计算$\sum_{i=1}^{n} ( ...
- Codeforce 1155D Beautiful Array(DP)
D. Beautiful Array You are given an array aa consisting of nn integers. Beauty of array is the maxim ...
- codeforce 121E - Lucky Array
10^4以内只由4和7构成的数字只有31种,那么做法就很简单了,求出每个数字与其最接近的幸运数的差值,然后建立线段树,线段树维护区间最小值和最小值个数,如果操作过程中最小值<0,那么就去对差值进 ...
- 三维dp&codeforce 369_2_C
三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...
- CodeForce 359C Prime Number
Prime Number CodeForces - 359C Simon has a prime number x and an array of non-negative integers a1, ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
随机推荐
- UpdatePanel和jQuery不兼容
在做项目中发现,在使用了UpdatePanel的地方,局部刷新后,jquery失效了. 后来网上一查,才发现,jquery中的ready事件会在DOM完全加载后运行一次,而当我们实用了UpdatePa ...
- sudo service memcached start
我安装后memcached后,并使用 ? 1 sudo service memcached start
- 基于visual Studio2013解决面试题之1405归并排序
题目
- 真机測试时的错误:No matching provisioning profiles found
1.出现错误的原因是这种---- 公司接收一个外包项目,原来做真机測试的时候,用的是公司申请的苹果开发人员账号.如今项目结束了,准备上线,但客户要求使用客户自己的苹果开发人员是账号上线,于是就用客户的 ...
- Qt QDebug等重定向到文件中
源地址:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/ Qt的qDebug() 等函数,可以打印出十分细致的 ...
- 1.1.0-学习Opencv与MFC混合编程之---全屏截图,保存为BMP图像(并增加快捷键)
源代码:http://download.csdn.net/detail/nuptboyzhb/3961677 Ø 添加全屏截图菜单项,菜单项的属性如下; Ø 为该菜单项建立类向导. 编辑消息处理函 ...
- Android Folding View(折叠视图、控件)
版本号:1.0 日期:2014.4.21 版权:© 2014 kince 转载注明出处 非常早之前看过有人求助以下这个效果是怎样实现的, 也就是側滑菜单的一个折叠效果,事实上关于这个效果的实现,谷 ...
- 0 and 1
Description Andrewid the Android is a galaxy-famous detective. In his free time he likes to think ab ...
- libcurl编程,整整17篇
http://www.cnblogs.com/lidabo/category/639633.html
- Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.命令通常从标准输入的地方读取输入,默认是终端.标准输出,默认情况下是终端. 重定向命令列表如下: 命令 说明 comm ...