20180519模拟赛T2——pretty
【问题描述】
小美今天对于数列很有兴趣。小美打算找出一些漂亮的序列。一个漂亮的序列的限制如下:
- 长度为 n ,而且数列里只包含 [1,n] 的整数。
- 要不是不降的序列就是不升的序列。
小美想知道有多少个合法的序列满足要求。
【输入格式】
从文件 pretty.in 中读入数据。
第一行一个正整数 n 表示数列的大小。
【输出格式】
输出到文件 pretty.out 中。
第一行输出一个数字表示答案。由于这个数字会很大,你需要输出他
模 1000000007 。
【样例】
【样例输入】
2
【样例输出】
4
【样例输入】
3
【样例输出】
17
【题目来源】
题解
首先,看到这样的问题,我们想到这应该是道dp。
我们设\(f[i][j]\)表示前\(i\)个数到达最后一位是\(j\)的递增序列的方案数,则不难根据对称性得出答案为\(2\sum_{i=1}^{n}f[n][i]-n\),减\(i\)是为了减去递增和递减都包含的情况(即全部相同的请况,那显然是\(i\))。
我们发现\(f[i][j]\)的状态由所有\(f[i-1][k](k\le j)\)的状态在结尾加上\(k\)转移过来。故转移方程为:\(f[i][j] = \sum_{k=1}^{j}f[i-1][k]\)。
于是暴力程序就打出来了,那么让我们打张表:
#include <cstdio>
const int n = 10;
int f[n+1][n+1];
int main()
{
freopen("biao.out", "w", stdout);
int ans;
for(int i = 1; i <= n; ++i)
f[1][i] = 1;
for(int i = 2; i <= n; ++i)
{
ans = 0;
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= j; ++k)
f[i][j] = f[i][j] + f[i-1][k];
for(int j = 1; j <= i; ++j)
ans = ans+f[i][j];
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
printf("%5d ", f[i][j]);
puts("");
}
}
biao.out
1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10
1 3 6 10 15 21 28 36 45 55
1 4 10 20 35 56 84 120 165 220
1 5 15 35 70 126 210 330 495 715
1 6 21 56 126 252 462 792 1287 2002
1 7 28 84 210 462 924 1716 3003 5005
1 8 36 120 330 792 1716 3432 6435 11440
1 9 45 165 495 1287 3003 6435 12870 24310
1 10 55 220 715 2002 5005 11440 24310 48620
一看发现:这不是杨辉三角吗?
于是毫不犹豫地打了个\(n^2\),然后就T飞了。
竟然没想到\(\sum_{i=1}^{n}f[n][i] = f[n+1][n] = C^{n}_{2n}\)(可以直接推,也可以看作是在序列结尾加一个\(n\)进行限制)。
于是答案就变成了\(2C^n_{2n}-n\)。取模要求逆元,用费马小定理做一下,总时间复杂度为\(O(n)\)。
当然,杨辉三角也是可以直接推出来的:
\]
以下是我的代码(由于模拟赛加了文件读入输出):
#include <fstream>
using namespace std;
typedef long long LL;
ifstream fin("pretty.in");
ofstream fout("pretty.out");
inline LL pow(LL x, LL y, LL mod)
{
LL ans = 1;
for(; y; y >>= 1, x = (x*x)%mod)
if(y & 1)
ans = (ans*x) % mod;
return ans % mod;
}
const LL mod = 1000000007;
const int maxn = 100005;
LL fac[maxn<<1];
int main()
{
LL n;
fin >> n;
fac[0] = 1;
for(int i = 1; i <= (n<<1); ++i)
fac[i] = fac[i-1] * i % mod;
fout << (fac[n<<1]* pow(fac[n]*fac[n]%mod, mod-2, mod)) % mod - n << endl;
return 0;
}
20180519模拟赛T2——pretty的更多相关文章
- 模拟赛T2 交换 解题报告
模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...
- 20161003 NOIP 模拟赛 T2 解题报告
Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- 20180530模拟赛T2——绀碧之棺
题目背景 qiancl 得到了一张藏宝图,上面写了一道谜题. 题目描述 定义\(F(n)\)为 n 在十进制下各个数位的平方和,求区间\([a,b]\)中有多少\(n\)满足\(k\times F(n ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- 5.12 省选模拟赛 T2 贪心 dp 搜索 差分
LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...
- 20161023 NOIP 模拟赛 T2 解题报告
Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
- 字符串模拟赛T2
// source code from laekov for c0x17 #define PRID "fkqh" #include <cstdio> #include ...
随机推荐
- JavaSE 面试题: 成员变量与局部变量
JavaSE 面试题 成员变量与局部变量 public class Test { static int s; int i; int j; { int i = 1; i++; j++; s++; } p ...
- [转帖]疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升
疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升 https://www.bilibili.com/read/cv4028300 数码 11-23 1589阅读28点赞22评论 尽管有ARM架构 ...
- docker封装mysql镜像
一.概述 直接使用官方的镜像 docker pull mysql:5.7 但是mysqld.cnf并没有优化,还是默认的. 二.封装镜像 创建目录 # dockerfile目录 mkdir -p /o ...
- 【题解】Luogu P5471 [NOI2019]弹跳
原题传送门 先考虑部分分做法: subtask1: 暴力\(O(nm)\)枚举,跑最短路 subtask2: 吧一行的点压到vector中并排序,二分查找每一个弹跳装置珂以到达的城市,跑最短路 sub ...
- 『Andrew and Chemistry 树同构』
Andrew and Chemistry Description During the chemistry lesson Andrew learned that the saturated hydro ...
- 『异或粽子 堆 可持久化trie』
异或粽子 Description 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 n 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 1 到 n.第 i 种馅儿 ...
- MOOC Web前端笔记(三):CSS样式
CSS样式 CSS概述 CSS--Cascading Style Shees层叠样式表 HTML定义网页的内容,CSS定义内容的样式. 内容和样式相互分离,便于修改样式. CSS语法 p{ font- ...
- 示例:自定义WPF底层控件UI库 HeBianGu.General.WpfControlLib V2.0版本
原文:示例:自定义WPF底层控件UI库 HeBianGu.General.WpfControlLib V2.0版本 一.目的:封装了一些控件到自定义的控件库中,方便快速开发 二.实现功能: 基本实现常 ...
- css元素水平垂直居中
温习一下元素水平垂直居中的几种方法 元素有具体宽度 1.absolute+负边距 .LV_center{ border: 1px solid red; position: absolute; widt ...
- Java Mockito 笔记
Mockito 1 Overview 2 Maven 项目初始化 3 示例 3.1 第一个示例 3.2 自动 Mock 3.3 Mock 返回值 3.4 Mock 参数 3.5 自动注入 Mock 对 ...