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中数组的声明.转换 ...
随机推荐
- Can't call commit when autocommit=true(转)
java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLEx ...
- 用lisp来让计算机学会写作
大部分的代码.思路参考了<Ansi Common Lisp>P138~P141. 问题:给一篇英文文本,如何让计算机依据此文本而生成随机但可读的文本.如: |Venture| The Na ...
- SRM 582 Div II Level Two SpaceWarDiv2
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12556 #include <iostream> # ...
- ZOJ 1542 POJ 1861 Network 网络 最小生成树,求最长边,Kruskal算法
题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limi ...
- 9、Cocos2dx 3.0游戏开发三查找值小工厂方法模式和对象
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个 ...
- android用canvas绘制两种波纹效果
波形效果有几种不同的呈现形式,比如从中间向四周散开的波形,也就是熟知的水涟漪:还有上下波动的曲线,像五线谱等.英文中可以称作Wave或者Ripple,所以暂且叫它们WaveView.WaveLayo ...
- asp.net微软认证全新考试题库及答案1
1.你创建了一个ASP.net应用程序,该程序将运行在TK公司的WEB站点上.你的应用程序包括100个WEB页面.你想配置你的应用程序,当HTTP代码发生错误时,可显示自定义的错误信息给用户.同时你想 ...
- JSP的学习(6)——九大隐式对象及其out对象
本篇将介绍JSP中的九大隐式对象,并重点介绍其中的out对象. 我们在之前的博客<JSP的学习(1)——基础知识与底层原理>一文中已经知道,JSP最终要被翻译和转换成Servlet,在转换 ...
- linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)(转)
tips: ============================= IFS - LINUX字段分隔符,内部字段分隔符 IFS(Internal Field Seperator)在Linux的she ...
- 静态书架和js模拟翻书效果
书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091