CF57C Array
题目大意(摘自洛谷)
描述
对于长度为n的数组A,A中只包含从1到n的整数(可重复)。如果A单调不上升或单调不下降,A就可称为美丽的。 找出在长度为n时,有几个美丽的A。
输入
一个整数n,(1<=n<=10^5)
输出
输出长度为n时,有几个美丽的A,由于答案可能非常的大,输出时需要将答案对1000000007取模.
Translated by KethGeorge
输入输出样例
2
4
3
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的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- JavaScript Array对象
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- javascript之活灵活现的Array
前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...
- 5.2 Array类型的方法汇总
所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...
- OpenGL ES: Array Texture初体验
[TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...
- Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
随机推荐
- MyBatis SQL语句写法
一.forEach 接口: public List<Entity> queryById(List<String> userids); 语法: <select id=&qu ...
- LVS(注意iptables和selinux的问题)
1.LVS(高负载) LVS(Linux虚拟服务器) Linux Virtual Server LVS集群采用IP负载均和技术和基于内容请求分发技术.调取器具有很好的吞吐率,将请求均衡的转移到不同的服 ...
- win7电脑磁盘文件以分组方式展现解决方案
问题: win7电脑磁盘文件以分组方式展现,具体如下: 解决: 右键磁盘空白处-->分组依据-->选择无:图解如下:
- 吴裕雄--天生自然KITTEN编程:演唱会
- 吴裕雄--天生自然KITTEN编程:翻译机
- Docker快速安装kafka
Docker快速安装kafka | 沈健的技术博客 盒子 盒子 博客 分类 标签 友链 搜索 文章目录 同样基于docker-compose安装,Docker快速部署nginx中有讲到,不在重述 1. ...
- 用Gitolite搭建服务器上的Git
使用git作为版本控制工具,确实非常流行且好用,常用的git代码服务器有Github还是国内的Gitcafe和OSC都是很不错,可以免费存放一些开源的项目代码,对于私人项目,则需要支付一定的费用.同时 ...
- 苹果会放弃iPhone吗?
苹果会放弃iPhone吗?一般来讲,这是一个相当白痴的问题,苹果放弃iPhone的概率比唐僧放弃取经的概率要低20倍.前段时间回老家,正在学习英语的小侄子问我:"叔叔,苹果用英语怎么说呀? ...
- HTML笔记03------cookie
新浪布局 初始布局代码: div.header+(div.container>(div.left+div.right))+div.footer ---------- .header{height ...
- USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)
此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...