oier刷题笔记2024/7/4|康师傅饮用水

news/2024/7/7 3:41:20/文章来源:https://www.cnblogs.com/Kang-shifu/p/18284720

字符串:
P4391 [BOI2009] Radio Transmission 无线传输
https://www.luogu.com.cn/problem/P4391
kmp的next数组
如果next[x]=len(0<len<x),那么就有s[len]=s[x];
那么去掉s[x]后得到的[1,x-1]依旧是原串的循环子串,因为 x 为最短长度,所以可得 next[x]一定
为0;
所以我们可以推论得到next[x+1]=1; next[x+2]=2...
最终得到 next[n]==n-x

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int n,kmp[maxn];
char a[maxn];
int main(){cin>>n;for(int i = 1;i <= n;i++){cin>>a[i];}int j = 0;for(int i = 2;i <= n;i++){while(j&&a[i]!=a[j+1]){j = kmp[j];}if(a[i] == a[j+1]) j++;kmp[i] = j;}cout<<n-kmp[n]<<endl;
}

P3435 [POI2006] OKR-Periods of Words
https://www.luogu.com.cn/problem/P3435

题目中的“匹配前缀”我们可以这样理解:在A的前缀中,把这个前缀再叠加一遍后就把A包括进来,如图:
abcabcab
''''''''''>>
abcabcabcabc

那么,"abcabcab"的最长匹配子串应该是"abcabc",长度为6。

我们设第一个图中字符串为S,第二个字符串为SS,显然有S[6..8]=SS[6..8]=SS[1..2]=S[1..2]。于是我们得到规律,匹配前缀子串满足KMP算法中“前缀等于后缀”的性质,我们要使子串最长,那么这个匹配长度应该尽可能小。比如对于S来说,next[8]应该为5,表示S[1..5]和S[4..8]是匹配的,但我们选择的是最短的匹配长度short[8]=2,S[1..2]=S[7..8],而答案就是8-short[8]=6。

但是KMP只能求出每个前缀串的最长匹配长度,如果要求出最短匹配长度,我们可以一直递推next[i],next[next[i]]...,直到为0. 熟悉的KMP本质的人都应该知道为什么,这里举一个例子。

在S中,next[8]=5,而next[5]=2,next[2]=0了,所以next[5]=2就是8的最短匹配长度,将8-2累计到答案中即可。

最后,类似求next时的递推方法,我们可以递推short来提高效率。比如在上例中,我们得到short[8]=2后,就直接将next[8]修改为2,这样8以后的数字如果递推到8了就可以直接跳到next[2]=0,而不用跳到next[5]这里。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int kmp[maxn];
char a[maxn];
long long ans = 0;
int n;
int main(){cin>>n;cin>>a+1;int j = 0;for(int i = 2;i <= n;i++){while(j&&a[i]!=a[j+1]) j = kmp[j];if(a[i] == a[j+1]) j++;kmp[i] = j;}j = 2;for(int i = 2;i <= n;i++){j = i;while(kmp[j]) j = kmp[j];if (kmp[i]) kmp[i] = j;ans += i-j;}cout<<ans<<endl;return 0;
}

P3805 【模板】manacher 复习一下qwq
https://www.luogu.com.cn/problem/P3805
首先,读入的字符串中应在每个有效字符之间插入无效字符,首尾字符应该不同,否则最中间字符的回文串长度会莫名其妙大1.
一开始我 WA on #8 & #16,应将 aaa 替换为 ?a?a?a?,我替换为了 a?a?a?(一定要养成看讨论区的习惯qwq)
其次,通过边界r(当前回文串可达的最右下标),mid(该回文串的对称中心)
如果一个回文串的左字串有回文,那么他的右字串中也一定有一个一样的回文串
按照这个思路

#include<bits/stdc++.h>
using namespace std;
const int maxn = 11e6+10;
char a[maxn],s[maxn<<1];
int p[maxn<<1];
int n;
int cnt = 0;
void data(){s[0] = '~';for(int i = 1;i < n*2;i++){if(i%2) s[i] = a[i/2];else s[i] = '#';}s[n*2] = '|';return;
}
inline void qr(){char c=getchar();s[0]='~',s[cnt=1]='|';while(c<'a'||c>'z') c=getchar();while(c>='a'&&c<='z') s[++cnt]=c,s[++cnt]='|',c=getchar();
}
int main(){//cin>>a;//n = strlen(a); qr();int ans = 0;//for(int i = 0;i <= n*2;i++) cout<<s[i]<<" ";for(int t = 1,r = 0,mid = 0;t <= cnt;t++){if(t<=r) p[t] = min(p[mid*2-t],r-t+1);while(s[t-p[t]]==s[t+p[t]]) p[t]++;if(t+p[t]>r) r = p[t]+t-1,mid = t;ans = max(ans,p[t]); }cout<<ans-1<<endl;
}

P3435 [POI2006] OKR-Periods of Words
https://www.luogu.com.cn/problem/P3435
其实就是模板题多求两个数组l,r;
l[i]记录在第i位左侧的最大回文串长度,r同理
最后求max(l[i],r[i]), 建议和manacher一起降绿(划掉)

其他乱七八糟的题:

P2661 [NOIP2015 提高组] 信息传递
https://www.luogu.com.cn/problem/P2661
枚举每个点求最小环

#include <iostream>
#include <cstdio>
using namespace std;
const int N = 200010;
int n, fa[N], ans = 2147483647;
int get (int x, int &cnt) { cnt ++;if (fa[x] == x) return x;else return get(fa[x], cnt);
}
int main () {cin>>n;for (int i = 1; i <= n; i ++)fa[i] = i;for (int i = 1; i <= n; i ++) {int cnt = 0, f;scanf("%d", &f);if (get(f, cnt) == i) {ans = min(ans, cnt);}elsefa[i] = f;}printf("%d", ans);return 0;
}

P4779 【模板】单源最短路径(标准版)
https://www.luogu.com.cn/problem/P4779
论本蒟蒻的知识体系到底有多千疮百孔
居然连dj都打不熟,那就多打几遍( );

#include<bits/stdc++.h>
const int maxn = 1e5+10,maxm = 2e5+10;
using namespace std;
struct edge{int to,dis,next;
};
edge e[maxm];
int head[maxn],dis[maxn],cnt;
bool vis[maxn];
int n,m,s;
void add_edge(int u,int v,int d){cnt++;e[cnt].dis = d;//权值 e[cnt].to = v;//终点 e[cnt].next = head[u];//以u为起点的上一条边的编号 head[u] = cnt;//更新return; 
}
struct node{int dis,pos;bool operator <( const node &x )const{return x.dis < dis;}
};
std::priority_queue<node> q;void dijkstra(){dis[s] = 0;q.push((node){0, s});while(!q.empty()){node tmp = q.top();q.pop();int x=tmp.pos,d=tmp.dis;if(vis[x]) continue;vis[x] = true;for(int i = head[x];i;i = e[i].next){int y = e[i].to;if(dis[y]>dis[x]+e[i].dis){dis[y] = dis[x]+e[i].dis;if(!vis[y]){q.push((node){dis[y],y});}}}}}
int main(){cin>>n>>m>>s;for(int i = 1;i <= n;i++) dis[i] = 2147483647;//警钟,初始化用的n一定要放在读入后//面!,本人调了足足1/48天才看出来原来是主函数有问题qwqfor(int i = 1;i <= m;i++){int u,v,w;cin>>u>>v>>w;add_edge(u,v,w);} dijkstra();for(int i = 1;i <= n;i++){cout<<dis[i]<<" ";}return 0;
}

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

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

相关文章

代码随想录算法训练营第四十九天 | 300.最长递增子序列 674.最长连续递增序列 718.最长重复子数组

300.最长递增子序列 题目链接 文章讲解 视频讲解动规五部曲:dp[i]: 表示考虑元素i的最长子序列为dp[i] 递推公式:dp[i] = max(dp[j] + 1, dp[i]); 初始化:dp[i] = 1; 每个元素单独算一个子序列长度为1 遍历顺序:从前向后遍历 打印dp数组class Solution { public:int length…

基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点

1.程序功能描述LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。本课题将分别对比lea…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。今天要介绍的这位同…

VPS折腾记七搭建稍后阅读应用

1.简介 看微信公众号的时候,文章太长,可以收藏起来,但是等到晚上看的时候,发现作者已经删除了,很遗憾。wallabag能够收藏文章并且保存到服务器,让我们可以稍后阅读,而且也不怕文章丢失。 wallabag is a self hostable application for saving web pages: Save and class…

基于PSO粒子群优化的CNN-LSTM的时间序列回归预测matlab仿真

1.算法运行效果图预览 2.算法运行软件版本 matlab2022a3.部分核心程序for i=1:Iterifor j=1:Npeoprng(i+j)if func_obj(x1(j,:))<pbest1(j)p1(j,:) = x1(j,:);%变量pbest1(j) = func_obj(x1(j,:));endif pbest1(j)<gbest1g1 = p1(j,:);%变量gbest1 = pbest1(j);end…

关于领域驱动设计,大家都理解错了

翻遍整个互联网,我发现,关于领域驱动设计,大家都**理解错了**。 今天,我们尝试通过一篇文章的篇幅,给大家展示一个完全不同的视角,把“领域驱动设计”这六个字解释清楚。 ## 领域驱动设计学习资料现状领域驱动设计的概念提出已经有20年的时间了,整个互联网充斥着大量书籍…

7.4日BootlLoad总结

最近在研究单片机远程升级方法,看了网上许多资料后了解到,远程升级就是用IAP方法去烧写flash区,而IAP方法在EEPROM中有用到,也就是所说的掉电记忆,掉电不丢失的情况,而相较于51单片机,网上的资料大多是有关STM32单片机的,且使用操作系统,适合于芯片内存较大的芯片,分…

(一):小程序与服务器的链接

首原文写于18年5月,因不再想继续使用C站,现将主要文件迁移至博客园。文中涉及技术部分已相对过时,但依旧对初始web的小朋友具有一定参考价值,权且玩乐。 环境IDE:myeclipse,服务器容器Tomcat,服务端主要用servlet。创建servlet小程序与服务器链接(前端和后端的交互)的…

可视化数据看板/数字孪生大屏到底有没有实际价值?详解数据可视化的实用价值

数据驾驶舱/数据看板/可视化大屏的实际价值,取决于使用者的实际需求。华而不实?华就是实! 关于可视化大屏最广泛的争议,便是对其“华而不实”的批评,认为可视化大屏缺乏技术含量,只是一钟比较高级的“装饰品”,更是一种典型的“面子工程”。这种偏见乍一看似乎有其道理,…

osg使用整理(12):SSAO屏幕空间环境光遮蔽

一、基础概念 1、SSAO:通过将褶皱、孔洞和非常靠近墙面变暗的方法,近似模拟间接光照。SSAO称为屏幕空间环境光遮蔽 ,使用屏幕空间场景的深度而不是真实的几何体数据来确定遮蔽量,速度快效果好。2、实现原理:根据物体表面法线方向生成一个半球随机深度采样,主要看物体周围…

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

本文主要分析了大学生电子计算机类比赛中“卷”“祖传老项目”“找关系”的现象,结合自身实践经验,给出了相应的解决方案。比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象? 正文 目前现状 对于大部分的比赛小白来说,对当前比赛的现…

2024.7.4 鲜花

今日推歌 natural Will you hold the line. 只有你还没有放弃。 When every one of them is giving up or giving in, tell me. 当其他所有人都停止了尝试,被挫折磨尽了希望。 In this house of mine,Nothing ever comes without a consequence or cost, tell me. 我所在之处,…

【python+selenium的web自动化】—— 控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

Python自动化之控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

设计模式-设计原则与设计模式总结

设计原则,是设计模式的基础。在实际开发中,并不是一定要求所有代码都遵循设计原则,我们需要综合考虑人力、时间、成本、质量,不是可以追求完美,要在设当的场景遵循合适的设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。 设计模式(Design Pattern)是前…

mirai Bot初始化配置

RT其实本来我的bot已经因为自己手贱登陆qq nt直接报废了,但是论坛里有佬提供了新的协议库,那这不赶紧复活bot都对不起这个新的协议库。 本文写于2024年7月4日19:20:21,可能随着时间久远而无法实现功能。由于存在下载障碍,所以这里也搞了个存档,本帖中的相关标星*资源无法下…

量化曲线的平滑程度

思路 1. 对原始数据一阶求导,得到一阶导数数组。 2. 对一阶导数数组求标准差。导数的标准差提供了导数值的波动性,标准差越小,曲线越平滑。 平滑曲线import numpy as np import matplotlib.pyplot as plt from matplotlib import font_manager fname="/usr/local/pytho…

Android常见错误

错误1 A problem occurred configuring root project ����ʶ��. > Could not resolve all files for configuration :classpath.> Could not resolve com.android.tools.build:gradle:8.4.0.Required by:project : > com.android.application:com.android.appli…

MyBatis中的Where标签:提升你的SQL查询效率

哈喽,大家好,我是木头左!理解MyBatis的Where标签 MyBatis是一款优秀的持久层框架,它提供了许多强大的标签来帮助编写更优雅、高效的SQL语句。其中,<where>标签是使用频率极高的一个,它能够自动处理查询条件,使得的SQL语句更加简洁和高效。在这篇文章中,将深入探讨…

Java中的JSON神器,如何轻松玩转复杂数据结构

哈喽,大家好,我是木头左!一、揭秘JSON世界的基石 在Java的世界中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于文本,易于阅读和编写,同时也易于机器解析和生成。JSON在日常开发中的应用非常广泛,无论是前后端的数据交互,还是配置文件的读取,…