【学习笔记】「JOISC 2022 Day1」错误拼写

这篇具有很好参考价值的文章主要介绍了【学习笔记】「JOISC 2022 Day1」错误拼写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

显然只用考虑 [ i : j ] [i:j] [i:j]这一段拼成的串。不难得出结论:设 n x t i nxt_i nxti表示 i i i之后第一个本质不同的字符的位置,那么 n x t i ≤ j nxt_i\le j nxtij,并且 s i ? s n x t i s_i?s_{nxt_i} si?snxti,或者 n x t i > j nxt_i>j nxti>j

我真傻,真的。这题恶心的地方在于转移,我们希望避免数据结构的使用。

注意到, s i = s i − 1 s_i=s_{i-1} si=si1始终是一个合法的转移。这意味着, i − 1 i-1 i1的状态可以直接照搬到 i i i。那么,考虑当 s i < s i − 1 s_i<s_{i-1} si<si1时,假设 s i s_i si的连续段到了 k k k,那么只需满足不存在 k ≤ l < i , r ≥ i k\le l<i,r\ge i kl<iri,并且 s i > s i − 1 s_i>s_{i-1} si>si1的限制 [ l , r ] [l,r] [l,r]。显然 k k k的取值范围是一段后缀,可以前缀和解决。当然还应该满足 s k ≠ s k − 1 s_k\ne s_{k-1} sk=sk1,这可以通过修改 d p dp dp状态定义来解决。这道题就做完了。

复杂度 O ( 26 n ) O(26n) O(26n)文章来源地址https://www.toymoban.com/news/detail-435160.html

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
using namespace std;
const int mod=1e9+7;
const int N=5e5+5;
int n,m;
ll sub[N][26],isub[N][26];
vector<pair<int,int>>G[N];
multiset<int>s1,s2;
void add(ll &x,ll y){x=(x+y)%mod;}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int l,r;
		cin>>l>>r;
		if(l<r){
			G[r].pb({l,0});
			s1.insert(l);
		}
		else{
			G[l].pb({r,1});
			s2.insert(r);
		}
	}
	for(int i=0;i<26;i++)sub[1][i]=i+1;
	for(int i=0;i<26;i++)isub[1][i]=26-i;
	for(int i=2;i<=n;i++){
		for(auto x:G[i-1]){
			if(x.se==0){
				s1.erase(s1.find(x.fi));
			}
			else{
				s2.erase(s2.find(x.fi));
			}
		}
		auto it=s1.lower_bound(i);
		int lmax=(it!=s1.begin())?(*--it):0;
		for(int j=1;j<26;j++){
			add(sub[i][j],sub[i-1][j-1]-sub[lmax][j-1]);
			add(isub[i][j],sub[i-1][j-1]-sub[lmax][j-1]);
		}
		it=s2.lower_bound(i);
		lmax=(it!=s2.begin())?(*--it):0;
		for(int j=0;j<25;j++){
			add(sub[i][j],isub[i-1][j+1]-isub[lmax][j+1]);
			add(isub[i][j],isub[i-1][j+1]-isub[lmax][j+1]);
		}
		for(int j=1;j<26;j++)add(sub[i][j],sub[i][j-1]);
		for(int j=24;j>=0;j--)add(isub[i][j],isub[i][j+1]);
		for(int j=0;j<26;j++){
			add(sub[i][j],sub[i-1][j]);
			add(isub[i][j],isub[i-1][j]);
		}
	}
	cout<<(sub[n][25]+mod)%mod;
}

到了这里,关于【学习笔记】「JOISC 2022 Day1」错误拼写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 算法笔记day1小结

    最近在通过胡凡的算法笔记一书学习算法,准备开个帖子记录下每日学习进展,话不多说那就开始吧! 定义:内存地址称为指针 , 指针变量即存储地址的变量。(虽然有点绕口,但可以理解为指针就是一个地址,对应着内存中的一个存储单元。unsigned类型的整数)。 指针的

    2024年02月19日
    浏览(8)
  • C++day1(笔记整理)

    C++day1(笔记整理)

    1.第一个c++程序:hello world 2.cout的使用  3.输出斐波那契的前10项。    1 1 2 3 5 8 13 ···· 4. cin标准输入流对象 5.终端输入一个字符,判断该字符的类型,字母(大写/小写)、数字字符,其他字符。 6.局部变量和命名空间冲突 7.全局变量和命名空间冲突问题 8.命名空间的嵌套 9.给

    2024年02月12日
    浏览(6)
  • leedcode刷题笔记day1

    leedcode刷题笔记day1

    题目大意: 暴力解法 两个for循环(也是我一看到题目想到的方法) 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于 target 复杂度分析 时间复杂度:O(n2),这里 n 为数组的长度 空间复杂度:O(1),只用到常数个临时变量 使用哈希表 为了省去一层

    2024年01月20日
    浏览(30)
  • UWB学习——day1

    UWB学习——day1

    UWB:Ultra Wideband(超宽频) UWB所谓的超宽频区别于其它近场通信技术可总结为 时域上跳跃,频域上矮胖 从图中可以看出,时域上通过短且强的脉冲信号,频域上主要是超宽的频谱(Spectrum) 调制(Modulation):把信号进行编码使其方便传播的过程 PPM 通过在 固定时间范围 内改

    2024年02月09日
    浏览(9)
  • 前端学习——ajax (Day1)

    前端学习——ajax (Day1)

    axios 使用 练习 练习 案例 axios 错误处理 https://apifox.com/apidoc/shared-1b0dd84f-faa8-435d-b355-5a8a329e34a8 url好像失效了

    2024年02月16日
    浏览(12)
  • 学习JavaSE基础-day1

    学习JavaSE基础-day1

    JRE 和 JDK JRE:Java运行环境,如果想要运行Java程序至少要安装JRE JDK:Java开发环境(开发工具包),如果要开发Java程序,必须安装JDK JRE = JVM + 核心类库 JDK = JRE + 开发工具包 JDK JRE JVM 关系如图所示:     JDK下载地址:www.oracle.com 配置Path环境变量:希望可以在命令窗口的任意的

    2024年02月07日
    浏览(11)
  • Nodejs前端学习Day1

    Nodejs前端学习Day1

    妈的,这几天真tm冷,前天上午还下了一整天的雪,大雪 妈的,昨天没学,上午练车去了,下午就当了一下午废物,操,真是个废物。 现在官网的描述: 学习视频中的描述(旧版本): 如果我们写了一段js放到浏览器中运行则证明在做前端开发 如果我们写了一段js放到node

    2024年01月25日
    浏览(12)
  • 前端学习——JS进阶 (Day1)

    前端学习——JS进阶 (Day1)

    局部作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 变量提升 函数提升 函数参数 动态参数 剩余参数 展开运算符 箭头函数(重要) 基本写法 箭头函数参数 箭头函数 this 数组解构 练习 数组解构 对象解构 多级对象解构 for each 案例 筛选

    2024年02月16日
    浏览(12)
  • 【剑指offer】学习计划day1

    【剑指offer】学习计划day1

    目录 一. 前言  二. 用两个栈实现队列         a.题目          b.题解分析           c.AC代码   二. 包含min函数的栈          a.题目          b.题解分析         c.AC代码   本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接: 剑指offer-学

    2023年04月24日
    浏览(11)
  • 前端学习——Web API(Day1)

    前端学习——Web API(Day1)

    Web API 基本认知 作用和分类 DOM DOM树 DOM对象 根据CSS选择器来获取DOM元素 小练习 其他获取DOM元素方法 识别标签 小练习 操作元素常用属性 小练习 操作元素样式属性 小练习 小练习 操作表单元素属性 自定义属性 小练习

    2024年02月13日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包