time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

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.

Input

The single line contains an integer n which is the size of the array (1 ≤ n ≤ 105).

Output

You must print the answer on a single line. As it can be rather long, you should print it modulo 1000000007.

Sample test(s)
input
2
output
4
input
3
output
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的更多相关文章

  1. Codeforces 57C Array dp暴力找到规律

    主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2* ...

  2. CodeForces 57C Array 组合计数+逆元

    题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数 ...

  3. 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 ...

  4. Codeforce 1175 D. Array Splitting

    新鲜热乎的题 Codeforce 1175 D. 题意:给出一个长度为$n$的序列$a$,你需要把它划分为$k$段,每一个元素都需要刚好在其中一段中.分好之后,要计算$\sum_{i=1}^{n} ( ...

  5. Codeforce 1155D Beautiful Array(DP)

    D. Beautiful Array You are given an array aa consisting of nn integers. Beauty of array is the maxim ...

  6. codeforce 121E - Lucky Array

    10^4以内只由4和7构成的数字只有31种,那么做法就很简单了,求出每个数字与其最接近的幸运数的差值,然后建立线段树,线段树维护区间最小值和最小值个数,如果操作过程中最小值<0,那么就去对差值进 ...

  7. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  8. CodeForce 359C Prime Number

    Prime Number CodeForces - 359C Simon has a prime number x and an array of non-negative integers a1,  ...

  9. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

随机推荐

  1. on、where、having的区别(转载)

    on.where.having的区别 on.where.having这三个都可以加条件的子句中,on是最先执行,where次之,having最后.有时候如果这先后顺序不影响中间结果的话,那最终结果是相 ...

  2. HDU 2025 查找最大元�

    个人感觉本题是个垃圾题 比方输入: ZZZZZZa 输出应该是: ZZZZZZa(max) 否则错. 判题系统有问题 查找最大元素 Time Limit: 2000/1000 MS (Java/Oth ...

  3. Java byte数据类型详解

    public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b ...

  4. [置顶] NS2中TCP拥塞控制仿真过程中盲点解析

    最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...

  5. jquery 获取 TABLE单元格的值

    1.JQ部分: var tds = $("#table1 td"); tds.click(function(){ //给所有td添加点击事件        var tdSeq = ...

  6. 基于visual Studio2013解决面试题之0610删除重复字符串

     题目

  7. 基于visual Studio2013解决面试题之0506取和为m的可能组合

     题目

  8. jssdk微信图片上传功能

    /*wx.config({ debug: false, appId: data.appid, timestamp: data.timestamp, nonceStr: data.nonceStr, s ...

  9. 【JAVA学习】单例模式的七种写法

    尊重版权:http://cantellow.iteye.com/blog/838473 第一种(懒汉.线程不安全): Java代码   public class Singleton { private ...

  10. 管理支撑办公系统技术架构选型对照讨论(J2EE与SOA对照)

    续:管理支撑办公系统技术架构选型及相关技术应用范围.方法分析 M域办公系统改造.整合涉及到OA.业务流程.部室信息站点.部室专业管理等系统和信息共享等新需求,从信息化视角来看,内容多并且杂,这里核心业 ...