[2021-09-11 CQBZ/HSZX多校联考 T1] 茅山道术 (后缀和优化dp)

茅山道术

  • description
  • solution
  • code

description

题目描述
小七擅长茅山道术,有一天他发现了 n 个排成一行的宝石,其中第 i 个宝石
有一个颜色 ci 。
小七决定用茅山道术替换一些宝石,具体地,他每次施法可以选定两个满足
cl = cr 的正整数 l; r(1 ≤ l ≤ r ≤ n) ,然后将区间 [l; r] 内的宝石全部替换为颜
色为 cl 的宝石。
小七想知道,在经过若干次施法后(可以一次也不施法),最终能形成多少
种可能的颜色序列呢?
两个序列不同等价于存在一个 i ,使得位置 i 的宝石在两个序列中颜色不
同。由于答案可能很大,你只需要输出答案对 109 + 7 取模的结果。
输入格式
输入文件 magic.in 包含 2 行。
第 1 行输入一个正整数表示 n 。
第 2 行输入 n 个正整数,其中第 i 个正整数表示 ci 。
输出格式
输出文件 magic.out 包含一行,仅一个非负整数,表示答案对 109 + 7 取模
的结果。
样例输入
6
1 2 1 3 4 3
样例输出
4
数据范围及约定

测试点编号n特殊性质
1 ∼ 4≤ 5
5 ∼ 10≤ 2 × 103
11 ∼ 14≤ 106ci ≤ 2
15 ∼ 20≤ 106

对于 100% 的数据,满足 1 ≤ k ≤ n ≤ 106; 1 ≤ ci ≤ n

solution

case 1~4 :随便暴力

case 11~14 :具有特殊性质1≤ci≤21\le c_i\le 21ci2

通过找规律(也可以证明),答案为nnn对应的斐波拉契数

case 5~10n≤2000n\le 2000n2000

前面的数据点只是为了不让做不出来的人难看罢了,只有这个数据点是设置的与正解有关的

显然可以承担n2n^2n2dpdpdp,设fi:[i,n]f_i:[i,n]fi:[i,n]的序列有多少种

暴力枚举iii可以和哪些j(i<j)j(i<j)j(i<j)匹配,即fi=∑j=i+1n[ci=cj]fj+1f_i=\sum_{j=i+1}^n[c_i=c_j]f_j+1fi=j=i+1n[ci=cj]fj+1(不匹配,保持原序列不变)

case 15~20n≤106,1≤ci≤nn\le 10^6,1\le c_i\le nn106,1cin

想办法在比较暴力的dpdpdp基础上优化掉一个nnn

发现对于iii有用的只有和其颜色相同的jjj,每个iii都会累加后面的所有与之颜色相同的jjj的答案

这其实是个后缀和的形式,后缀和优化,即gc:g_c:gc:iii为止颜色为ccc的所有j(i<j)j(i<j)j(i<j)fff之和

每次求完fif_ifi后,再对gcig_{c_i}gci进行更新

时间复杂度O(n)O(n)O(n)

还不用对颜色离散化,代码就更简单了

code

#include <cstdio>
#define maxn 1000005
#define int long long
#define mod 1000000007
int n;
int c[maxn], f[maxn], g[maxn];signed main() {freopen( "magic.in", "r", stdin );freopen( "magic.out", "w", stdout );scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) {scanf( "%lld", &c[i] );if( c[i] == c[i - 1] ) i --, n --;}f[n + 1] = 1;for( int i = n;i;i -- ) {f[i] = ( f[i + 1] + g[c[i]] ) % mod;g[c[i]] = ( g[c[i]] + f[i + 1] ) % mod;}printf( "%lld\n", f[1] );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P1484:种树(反悔贪心)

解析 反悔贪心好题。 我放弃wqs二分做法好吧。 要加强从边界和特殊情况入手思考问题的思想。 考虑选一个的时候&#xff0c;肯定是选最大值。 此时它两侧的值就不能选了。 那如果我后来不选这个最大值了&#xff0c;必然是我转而把它两侧的值都给选了&#xff0c;额外消耗一…

月旦评 之 DevOps招贤令2019 - 没有人比我们更懂DevOps

公元164-182年间&#xff0c;汝南平舆的许氏兄弟于每月初一品评人物&#xff0c;褒贬时政&#xff0c;被称为“月旦评”。所谓“子治世之能臣&#xff0c;乱世之奸雄也”这句许邵评价曹操的话也是来自于“月旦评”&#xff1b;时间一下子来到了2019年&#xff0c;DevOps招贤令再…

HDU - 2204 Eddy‘s爱好(尚未完全解决)

HDU - 2204 Eddy’s爱好 题意&#xff1a; 给你一个正整数N&#xff0c;确定在1到N之间有多少个可以表示成M^K&#xff08;K>1)的数 题解&#xff1a; 参考题解&#xff1a; 我们先举例找找规律 1~10以内2的次方有多少个&#xff1f;有121,224,329,一共三个&#xff0c;…

[2020-09-11 CQBZ/HSZX多校联测 T2] 泰拳警告(组合数+数学期望)

泰拳警告descriptionsolutioncodedescription 题目描述 小七擅长泰拳&#xff0c;某天他打算与小枣切磋拳技&#xff0c;一共需要进行 n 次比赛。 由于双方拳技难分上下&#xff0c;每场比赛小七获胜或落败的概率都是 1/p2 &#xff0c;平局的概率是 p/p2 若最后小七获胜场数大…

模板:wqs二分

所谓wqs&#xff0c;就是windwhisper说&#xff1a;“qs” &#xff08;逃&#xff09; 解析 很神奇的科技。 四两拨千斤的解决一些本来可能不太好解决的问题。 经典模型&#xff1a;有若干个物品&#xff0c;要求选出 mmm 个&#xff0c;选的时候带有限制&#xff0c;求最优…

EF Core中避免贫血模型的三种行之有效的方法(翻译)

[Paul Hiles: 3 ways to avoid an anemic domain model in EF Core &#xff1a;https://www.devtrends.co.uk/blog/3-ways-to-avoid-an-anemic-domain-model-in-ef-core]1.引言在使用ORM中&#xff08;比如Entity Framework&#xff09;贫血领域模型十分常见 。本篇文章将先探…

[ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)

Peaksdescriptionsolutioncodedescription 在Bytemountains有N座山峰&#xff0c;每座山峰有他的高度h_i 有些山峰之间有双向道路相连&#xff0c;共M条路径&#xff0c;每条路径有一个困难值&#xff0c;这个值越大表示越难走 现在有Q组询问&#xff0c;每组询问询问从点v开…

洛谷P2754:[CTSC1999]家园 / 星际转移问题(网络流)

解析 容易想到对每个时间的空间站都建一个点。 然后发现循环问题很难搞。 然后我就一直想从 lcm 下文章&#xff0c;结果 lcm 可以到3e5&#xff0c;于是就寄了… qwq 注意到本题的数据范围极小&#xff01; 那个3e5云云是不可能跑出来的&#xff0c;事实上&#xff0c;答案不…

Saving Beans HDU - 3037(卢卡斯定理)

Saving Beans HDU - 3037&#xff08;卢卡斯定理&#xff09; 题意&#xff1a; 他们想知道有多少种方法可以在n树中保存不超过m个bean&#xff08;它们是相同的&#xff09;。 现在他们求助于你&#xff0c;你应该给他们答案。 结果可能非常巨大; 你应该输出模p的结果&…

我们为什么要搞长沙.NET技术社区(三)

我们为什么要搞长沙.NET技术社区&#xff08;三&#xff09; 小饭局搞事情先从饭局开始是中华民族的优良传统。昨天晚餐时间&#xff0c;长沙 .net 技术社区的主要发起人员进行了一番小聚&#xff0c;同时也作为一个非正式会议&#xff0c;对社区发展进行了探讨。从介绍自己对于…

BZOJ4504. K个串(主席树+优先队列)

4504. K个串descriptionsolutioncodedescription 兔子们在玩k个串的游戏。首先&#xff0c;它们拿出了一个长度为n的数字序列&#xff0c;选出其中的一 个连续子串&#xff0c;然后统计其子串中所有数字之和&#xff08;注意这里重复出现的数字只被统计一次&#xff09;。 兔…

【招聘(北京)】北森测评招聘 .NET 架构师、高级工程师

工作职责公司核心产品的迭代需求分析设计开发。公司核心产品的线上维护和性能调优。对初中级技术人员培养和质量把关。编写软件设计和技术文档。任职资格为人正直、诚信、责任心强&#xff0c;能承受较大工作压力。强烈的目标导向意识&#xff0c;逻辑思维清晰&#xff0c;执行…

网络流模型与技巧总结

文章目录前言常见基本模型最大匹配、最小点覆盖和最大独立集构造最小点覆盖最大点权匹配最小路径覆盖不可重覆盖可重覆盖最大权闭合子图建图技巧利用拆点进行限流利用断边表示决策利用虚点表示组合关系链状模型用链表示时间轴用链表示偏序关系形式的选取限制通过拆点描述先后顺…

卢卡斯定理 Lucas

参考文章 详细定义内容看这个参考文章 结论&#xff1a; 模板&#xff1a; Lucas函数&#xff1a; long long Lucas(long long n,long long m){if(m0) return 1;return Lucas(n/p,m/p)*C(n%p,m%p)%p; }组合数函数&#xff1a; 此处求逆元的用的bp-2 long long C(long long…

BZOJ #2874. 训练士兵(差分+离散化+主席树)

BZOJ #2874. 训练士兵descriptionsolutioncodedescription Ryz正在着手于训练一批精锐士兵 Ryz手下有n*m个士兵&#xff0c;排成一个n行m列的方阵。在一天中&#xff0c;ryz会对士兵下达一些命令&#xff0c;每个命令作用于一个小方阵的所有士兵&#xff0c;并且会增加他们的…

VS 2019 要来了,是时候了解一下 C# 8.0 新功能

近日&#xff0c;微软发布了 Visual Studio 2019 的发布日期&#xff0c;2019 年 4 月 2 日 Visual Studio 2019 将正式和大家见面&#xff0c;同时微软还将提供发布现场实时直播。除了 Visual Studio 2019 自身之外&#xff0c;VS 2019 的发布还牵动着很多 C# 开发者的心。虽然…

[蓝桥杯2020国赛]游园安排

题目&#xff1a; 题解&#xff1a; 本质就是求最长上升子序列&#xff0c;只不过这里是字符串版本的&#xff0c;我们都知道有n^2的LIS&#xff0c;但其实还有O(nlogn)版本的&#xff0c;详细看这里&#xff0c;套上就行 另外我发现这里竟然有蓝桥杯全套的编程题离谱&#xf…

洛谷P2761:软件补丁问题(状压、分层图最短路)

当遇到瓶颈时&#xff0c;想想自己是否做了可以优化的无用功。 解析 不难想到状压最短路的做法。 但是直接加边的话边数会是 O(m2n)O(m2^n)O(m2n) 级别&#xff0c;只有 909090 分&#xff0c;难以通过。 注意到&#xff0c;由于补丁很少&#xff0c;真正能达到的状态是很有限…

[2020-09-11 CQBZ/HSZX多校联测 T3] 万猪拱塔(线段树+巧妙转化)

万猪拱塔descriptionsolutioncodedescription 题目描述 小七养了很多头猪&#xff0c;它们分布在 n 行 m 列中&#xff0c;其中第 i 行第 j 列的猪圈养的是第 wi,jw_{i,j}wi,j​ 种猪。 小七有时会选择一个子矩形范围内的猪圈进行巡视&#xff0c;如果该子矩形包含 i 行 j 列 …

重新解读DDD领域驱动设计(一)

回顾十年前&#xff0c;还未踏入某校时&#xff0c;便听闻某学长一毕业就入职北京某公司&#xff0c;月薪过万。对于一个名不见经传的小学院&#xff0c;一毕业能拿到这个薪水还是非常厉害的。听闻他学生期间参与开发了一款股票软件&#xff0c;股票那时正迎来一波疯涨。时也运…