茅山道术

  • 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 ≤ 106 ci ≤ 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 21≤ci​≤2

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

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

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

显然可以承担n2n^2n2的dpdpdp,设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~20 :n≤106,1≤ci≤nn\le 10^6,1\le c_i\le nn≤106,1≤ci​≤n

想办法在比较暴力的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;
}

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

  1. [jzoj 4249] 【五校联考7day1】游戏 {贪心/斜率优化}

    题目 Description WYF从小就爱乱顶,但是顶是会造成位移的.他之前水平有限,每次只能顶出k的位移,也就是从一个整点顶到另一个整点上.我们现在将之简化到数轴上,即从 一个整点可以顶到与自己相 ...

  2. jzoj 4240.【五校联考5day2】游行 主席树优化连边+支配树

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  3. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  4. 计算机网络八校联考,八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难?...

    原标题:八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难? 近日,湖北省内高中有名的阶段性考试"八校联考"成绩出炉,这也是湖北省高三复课后的第一次线下全省统一考试. 小 ...

  5. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

  6. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  7. 「多校联考」第三周二场

    「多校联考」第三周二场 T1 分数转换 题目 考场思考(正解) T2 Slow Path Finding Algorithm (SPFA) 考场思路 正解 T3 切面包 考场思路 正解 这套题是真的很 ...

  8. 计算机组成原理湖北联考,计算机组成原理湖北七校联考-2014(a卷)v2教学教材(9页)-原创力文档...

    计算机组成原理湖北七校联考2013-2014(A卷)V2 精品文档 精品文档 收集于网络,如有侵权请联系管理员删除 收集于网络,如有侵权请联系管理员删除 精品文档 收集于网络,如有侵权请联系管理员删除 ...

  9. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

最新文章

  1. 目前计算机无法显示的四叠字,四叠字列表(共19个),还能用的四叠字大全
  2. 7 centos ssh 单机_centos7单机安装kafka
  3. idea怎么搜索文件——search everywhere
  4. Redis的 Window 版安装(详细配置环境,后台运行)
  5. C编程实践:简单的通讯录
  6. linux命令fsck和fcsk,在ubuntu中shutdown和reboot的各参数的作用是什么? | 星尘
  7. ACE总监侯圣文全面解析特训方法
  8. wxpython应用实例_wxPython定时器wx.Timer简单应用实例
  9. Web中间件常见安全漏洞总结
  10. (MathType)公式编号(1)和(2a)(2b)混编
  11. LVM逻辑卷管理总结
  12. 【Linux学习010】算数运算、文件测试、字符测试、位置变量和特殊变量
  13. Hive,Pig,HBase 傻傻分不清楚
  14. 基于php网上零食商店管理系统获取(php毕业设计)
  15. PPT母版中更改了页码后,但是应用了该母版的幻灯片没有发生变化
  16. java 正则表达式 去掉 文章头部和尾部的空格(全角,半角)、制表符、换页符
  17. Navigator的教程
  18. 自然语言推断(NLI)、文本相似度相关开源项目推荐(Pytorch 实现)
  19. Leaflet 可视化--风场、海浪、洋流、气压、温度等
  20. 编写一程序从键盘输入圆锥体的半径r 高度h 并计算其体积

热门文章

  1. 趣读:程序员泪流满面的20个瞬间!
  2. csv文件设置每个cell大小_Python对文本文件和Excel的处理机制
  3. 微型计算机c560,2010广东省计算机等级考试试题 二级C试题最新考试试题库
  4. html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...
  5. java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...
  6. css规则中区块block,CSS的命名方式:BEM(区块、元素、修饰符)
  7. linux 用mutex定义一个linkedlist,一个高性能无锁非阻塞链表队列
  8. linux退出lftp命令,lftp命令使用
  9. 「offer来了」2种递进学习思维,24道计网题目,保姆级巩固你的计网知识体系
  10. 洛谷 P2040 打开所有的灯-dfs