NOIP2018 模拟 Problem A 解题报告 求子序列
1.1 题目描述
给定序列 A, 求出 A 中本质不同的子序列 (包含空的子序列) 个数模
10^9+7的结果
一个序列 B 是 A 的子序列需要满足 A 删掉某些元素后能够得到 B.
两个子序列中对应位置的数都相同我们就认为这两个子序列本质相同.
1.2 输入格式
第一行包含一个整数 N , 代表序列的长度.
接下来一行 N 个整数, 第 i 个数代表 Ai
.
1.3 输出格式
输出一个整数代表答案.
1.4 样例输入
5
2 3 1 3 2
1.5 样例输出
27
1.6 数据范围
对于 20% 的数据, N 10.
对于 40% 的数据, N 20
对于 70% 的数据, N 100000; 1 Ai 100
对于 100% 的数据, N 1000000; 1 Ai N
这个题目实际上是求给定序列的所有子序列,考试时用的是枚举组合数+对序列hash的40分做法(然而并没有40分,事实证明非洲人是不适合用hash的)
后来才知道求一个序列的子序列有个公式
设f[i]表示到第i个数时所有的子序列个数
if(之前没有重复元素出现)
f[i]=f[i-1]*2+1;
else
f[i]=f[i-2]*2-f[该元素之前出现的位置-1];
以2 3 1 3 2为例
对2来说,它对答案的贡献只有它自己,为1,f[i]=1;
对3来说,它对答案的贡献是它自己和2连在一起的2,3,为2 , f[i]=3;
对1同上
对第二个3来说,第一个3之前的部分,既可以连第一个3,也可以连第二个3,所以它对答案的贡献是第一个3之后的部分,f[i]= f[i]=f[i-2]*2-f[第一个3出现的位置-1];
对第二个2同上
p.s:其实也可以用看成集合求子集,用2^n-1来理解
完整代码
#include<bits/stdc++.h> using namespace std; const int MAXN=105; int f[MAXN],a[MAXN],mark[MAXN],n; int main() {cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){if(!mark[a[i]])f[i]=f[i-1]*2+1; elsef[i]=f[i-1]*2-f[mark[a[i]]-1]; mark[a[i]]=i; } cout<<f[n]+1; return 0; }
转载于:https://www.cnblogs.com/pcpcppc/p/9337177.html
NOIP2018 模拟 Problem A 解题报告 求子序列相关推荐
- 【洛谷】NOIP2018原创模拟赛DAY1解题报告
点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...
- NOI2021模拟测试赛 解题报告
(一) A 暴力:求出所有直线的解析式,对于每个点枚举所有直线看是否经过该点 优化:分块.关键是分块方式,这里是把平面分成sqrt(n)*sqrt(n)块 实现细节: 1.vector直接开二维来表示 ...
- HDOJ 1002 A + B Problem II 解题报告
今天研究 1002,,,搞得半死,虽说是一道简单的题目,真正做起来绝不是很容易的... A + B Problem II Time Limit: 2000/1000 MS (Java/Others) ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOIP2018提高组Day1 解题报告
前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...
- nowcoder 提高组模拟赛 选择题 解题报告
选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...
- hdu 1022 Train Problem I 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 其实是一道上数据结构课讲过的例题 只不过当时讲的是怎么用手算 一道水题又花了好长时间 其实就 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- NOI导刊模拟2—电话网络 解题报告
题目大意:给出一个图,顶点为1到n和一个值k,求出包含顶点1到顶点n的通路的子图中,第k+1大的边最短为多少?(若存在一条从1到n路径边数小于等于k,则返回0,若不存在通路,返回-1) 思路:一开始我 ...
- 旅行商问题(travelling salesman problem, TSP) 解题报告
旅行商问题是个熟知的问题.这次是因为coursera上面选的算法课而写代码实现.这里做个简单总结. 测试程序: 25 20833.3333 17100.0000 20900.0000 17066.66 ...
最新文章
- 2020职场人裸辞三大原因:不开心、工资低、没有盼头
- 爱立信前CEO Hans Vestberg成为Verizon三巨头之一
- 计算机组成原理学习1习题1
- numpy reshape resize用法
- 【收藏】GeoMesa-HBase原理篇——写入过程
- 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
- 你知道出现“乱码”的原因是什么吗?(4)
- android monkey优化,GitHub - baozhida/AndroidMonkey: 这个项目是CrashMonkey4Android可执行文件,修复了一些bug,做了一些优化...
- 计算几何 —— 二维几何基础 —— 距离度量方法
- 万字总结Keras深度学习中文文本分类
- matlab打开figure2,matlab figure2无法输出图形
- 使用 WinSCP 连接到 VCSA 6.5 失败并显示以下错误:收到的 SFTP 数据包过大
- JRtplib开发笔记(一):JRtplib简介、JThread库编译
- 惠普bios硬重置_惠普BIOS密码重置工具|惠普笔记本BIOS密码重置工具 - 万方软件下载站...
- python视频教程唐学韬-python
- 剑指Offer(第二版)-思路简述-第一期(简单难度)
- Excel VBA 代替Sumproduct实现多条件求和
- cf12月9日服务器维护时间,《CF》12月9日更新后进不去大厅怎么回事 新版大厅无法进入解决攻略...
- excel向程序发送命令时出现错误
- 2022-2028年中国垃圾处理行业全景调研及投资前景建议报告