题目传送门

题目大意(摘自洛谷

描述

对于长度为n的数组A,A中只包含从1到n的整数(可重复)。如果A单调不上升或单调不下降,A就可称为美丽的。 找出在长度为n时,有几个美丽的A。

输入

一个整数n,(1<=n<=10^5)

输出

输出长度为n时,有几个美丽的A,由于答案可能非常的大,输出时需要将答案对1000000007取模.

Translated by KethGeorge

输入输出样例
输入 #1复制

2
输出 #1复制

4
输入 #2复制

3
输出 #2复制

17

一道数论题

建立模型:一个高为1 ,长为2n-1的矩形,由1*1的小方格排列而成,其中n-1个是空格,n个记录从第一个小方格到当前小方格中,共有多少个空格标志。这些数值组成所求数组,只不过,数字的范围是从0 ~ n-1,与题目从1 ~ n是等价的。

例如n=5,[1,2,2,4,5](等价于[0,1,1,3,4])即为

0

1

1

3

4

这种序列可以得到C(2n-1,n)个,同样的,满足非升序列的种数也是C(2n-1,n),

但是,当数组中n个数都相同,是两种序列重复的,共有n种

因此,最终答案是,2C(2n-1,n)-n(或者C(2n,n)-n,可以发现恒等))

由于n和mod的值很大,我们要用逆元对组合数取模

……(此处省略114514字)数论只会GCD的我百度了半天

最终答案为(2*(2n-1)*..(n+1)*(n-1)!^(mod-2)-n+mod)%mod

其中乘方用快速幂

时间复杂度O(2*n+log1000000007)

上代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=;
int n;
ll up=,down=;
ll inverse(ll x,ll y)//求逆元(快速幂) a关于p的逆元ans=a^(p-2)
{
ll ans=;
while(y)
{
if(y&)
ans=ans*x%mod;
x=x*x%mod;
y>>=;
}
return ans;
}
int main()
{
//freopen("array10.in","r",stdin);
//freopen("array10.out","w",stdout);
scanf("%d",&n);
for(int i=n+;i<*n;i++)//分子(2n-1)*……*n+1
up=up*i%mod;
for(int i=;i<=n-;i++)//分母(n-1)!
down=down*i%mod;
printf("%d\n",((*up*inverse(down,(ll)mod-))-n+mod)%mod);//变除为乘,求逆元
return ;
}

CF57C Array的更多相关文章

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

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

  2. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  3. JavaScript Array对象

    介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  6. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  7. 5.2 Array类型的方法汇总

    所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...

  8. OpenGL ES: Array Texture初体验

    [TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...

  9. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

随机推荐

  1. drf中的jwt使用与手动签发效验

    jwt认证 1)session存储token,需要数据库参与,耗服务器资源.低效 2)缓存存token,需要缓存参与,高效,不易集群 3)客户端存token,服务器存签发与交易token的算法,高效, ...

  2. Catalan数应用问题

  3. IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客

    一.IPsec简介 IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全 ...

  4. Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警

    服务端安装 Elasticsearch和Kibana(需要安装openjdk1.8以上) 安装方法:https://www.elastic.co以Ubuntu为例: wget -qO - https: ...

  5. 人心和隐私怎么防?“防出轨”APP让道德滑落

    ​ 王尔德曾说过,"一个人应该永远保持一点神秘感".让·保·里克特也表示,:"一个人泄露了秘密,哪怕一丝一毫,就再也得不到安宁了".可见,对于自然人来说,保有自 ...

  6. vector 循环里删除多个元素

    ; i < (int)vecLines.size(); i++) { AcDbLine * l1 = vecLines[i]; if (l1 == NULL) { continue; } //记 ...

  7. Linux系统发行版本及其区别

    1 Linux系统组成 Linux操作系统=Linux内核+GNU软件及系统软件+必要的应用程序.下表为Linux系统各组成部分的贡献人员: Linux内核 GNU组件(gcc.bash) 其他必要应 ...

  8. IDEA打包web项目为war,通过本地Tomcat启动war

    1.打包 ①idea的打包很简单,网上教程也很多,简单说下:project struct-->artifact-->+-->Web Application:Archive--> ...

  9. iMX287A嵌入式Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...

  10. Web图片资源的加载与渲染时机

    此文研究页面中的图片资源的加载和渲染时机,使得我们能更好的管理图片资源,避免不必要的流量和提高用户体验. 浏览器的工作流程 要研究图片资源的加载和渲染,我们先要了解浏览器的工作原理.以Webkit引擎 ...