2020牛客暑期多校训练营(第二场) A.All with Pairs【KMP / 字符串hash】

YOLO26算法大门区域检测+训练好的模型+285张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[大门(gates)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 64 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.6364** mAP50-95 | 0.4539 Precision | 0.7309 Recall | 0.6111 train/box_loss | 0.6662 train/cls_loss | 0.5916 val/box_loss | 1.3351 val/cls_loss | 1.5479 【训练过程分析】 训练过程可分成三个主要阶段:前期、中期和后期。刚开始时,模型的损失函数确实有了显著下降,box_loss 从0.6662开始,经过几轮的迭代,迅速降至0.5左右。但到了中期,loss 的下降速度明显放缓,甚至有停滞不前的趋势。这一现象在val/box_loss的表现上尤其明显,从1.3351缓慢上升至1.4左右,直到训练到64轮时才略有下降。在这一阶段,mAP50从0.6364仅轻微上升到0.64,提升有限。这期间,模型似乎陷入了平台期,进展缓慢,让人感到有些煎熬。从第30轮到第64轮,我频繁查看曲线图,希望能捕捉到一点改善的迹象,但都未能如愿。这个阶段也让我对模型的潜力产生了怀疑,担心训练过程可能需要更长时间才能看到显著改善。 进入后期阶段,尽管损失函数略有下降,但mAP50的提升并不明显,这让人感到非常... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

Link

KMP / 字符串hash

前置

字符串hash

  1. 记录一字符串所有前缀出现次数
#define base 131
#define ull unsigned long long
unordered_map<ull,int> mp;
string a;
void hash(char a[]){
	int len=strlen(a);
	ull t=0;
	for(int i=0;i<len;i++){
		t=t*base+a[i]-'a'+1;
		mp[t]++;
	}
}
  1. 记录一字符串所有后缀出现次数
#define base 131
#define ull unsigned long long
unordered_map<ull,int> mp;
string a;
void hash(char a[]){
	int len=strlen(a);
	ull t=0,p=1;
	for(int i=len-1;i>=0;i--){
		t=t+p*(a[i]-'a'+1);
		p*=base;
		mp[t]++;
	}
}

KMP

int ne[maxn];
void getne(char a[]){
	ne[0]=0;
	int len=strlen(a);
	for(int i=1,j=0;i<len;i++){
		while(a[j]!=a[i]&&j) j=ne[j-1];
		if(a[i]==a[j]) j++;
		ne[i]=j;
	}
}

题意

给定n个字符串 s 1 , s 2 . . . s n s_1,s_2...s_n s1​,s2​...sn​,求 ∑ i = 1 n ∑ j = 1 n f ( s i , s j ) 2 ( m o d 998244353 ) \sum\limits_{i=1}^n\sum\limits_{j=1}^nf(s_i,s_j)^2(mod998244353) i=1∑n​j=1∑n​f(si​,sj​)2(mod998244353)
f ( s i , s j ) f(s_i,s_j) f(si​,sj​)表示 s i s_i si​的前缀与 s j s_j sj​的后缀相同时的最长长度

分析

  1. 考虑朴素算法
    枚举每个串的前缀,用map找到记录的相应后缀的数量,则 a n s + = 前 缀 长 度 2 ∗ 数 量 ans+=前缀长度^2*数量 ans+=前缀长度2∗数量
  2. 去重
    显然用前缀去找后缀时,同一个字符串可能会被多次找到,使得答案偏大,因此考虑去重
  3. 性质
    令 s i = x 1 x 2 x 3 , s j = y 1 y 2 y 3 s_i=x_1x_2x_3,s_j=y_1y_2y_3 si​=x1​x2​x3​,sj​=y1​y2​y3​(抽象为前缀、中间、后缀)
    设 x 1 = y 3 x_1=y_3 x1​=y3​,即此时 s i s_i si​第一次找到 s j s_j sj​
    设 x 1 x 2 x 3 = y 1 y 2 y 3 x_1x_2x_3=y_1y_2y_3 x1​x2​x3​=y1​y2​y3​,此时第二次找到
    联立式子得 x 1 = y 1 = x 3 = y 3 , x 2 = y 2 x_1=y_1=x_3=y_3,x_2=y_2 x1​=y1​=x3​=y3​,x2​=y2​
    则可知 s i = x 1 x 2 x 1 , s j = y 1 y 2 y 1 s_i=x_1x_2x_1,s_j=y_1y_2y_1 si​=x1​x2​x1​,sj​=y1​y2​y1​
    因此可得出结论:若 s i s_i si​通过 x 1 x 2 x 1 x_1x_2x_1 x1​x2​x1​的形式找到 s j s_j sj​, s i s_i si​必能通过 x 1 x_1 x1​找到 s j s_j sj​
  4. 转化
    令k表示 x 1 x_1 x1​找到的数量
    则据分析,正解应为 a n s + = 前 缀 长 度 2 ∗ ( k − 数 量 ) ans+=前缀长度^2*(k-数量) ans+=前缀长度2∗(k−数量)
    即本次枚举的最长相同前后缀对应的前缀能找到的数量减去本次枚举的数量
    考虑KMP,求next数组

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
const int mod=998244353;
const long long inf=1e18;
const int base=131;
const double pi=3.1415926;
#define ll long long
#define int long long
#define ull unsigned long long
#define maxx(a,b) (a>b?a:b)
#define minx(a,b) (a<b?a:b)
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define debug(...) fprintf(stderr, __VA_ARGS__)
inline ll qpow(ll base, ll n) { assert(n >= 0); ll res = 1; while (n) { if (n & 1) res = res * base % mod; base = base * base % mod; n >>= 1; } return res; }
ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b);}
ll lcm(ll a,ll b) { return a*b/gcd(a,b); }
ll inv(ll a) {return a == 1 ? 1 : (ll)(mod - mod / a) * inv(mod % a) % mod;}
ll C(ll n,ll m){if (m>n) return 0;ll ans = 1;for (int i = 1; i <= m; ++i) ans=ans*inv(i)%mod*(n-i+1)%mod;return ans%mod;}
ll A(ll n,ll m){ll sum=1; for(int i=n;i>=n-m+1;i--) sum=(sum*i)%mod; return sum%mod;}
ll GetSum(ll L, ll R) {return (R - L + 1ll) * (L + R) / 2ll;} //等差数列求和 
 
/************/
int n,ans,cnt[maxn],ne[maxn];
string a[maxn];
unordered_map<ull,int> mp;
void getne(string a){
	int len=a.size();
	for(int i=1,j=0;i<len;i++){
		while(a[i]!=a[j]&&j) j=ne[j-1];
		if(a[i]==a[j]) j++;
		ne[i]=j;
	}
}
//统计后缀 
void hash_suffix(string a){
	int len=a.size();
	ull t=0,p=1;
	for(int i=len-1;i>=0;i--){
		t=t+p*(a[i]-'a'+1);
		p*=base;
		mp[t]++;
	}
}
void sol(){
	for(int i=0;i<n;i++){
		int len=a[i].size();
		ull t=0;
		getne(a[i]);
		for(int j=0;j<len;j++){
			t=t*base+a[i][j]-'a'+1;
			cnt[j]=mp[t];
		}
		//去重 
		for(int j=0;j<len;j++){
			int k=ne[j];
			if(k) cnt[k-1]-=cnt[j];
		}
		for(int j=0;j<len;j++){
			ans=(ans+cnt[j]%mod*(j+1)%mod*(j+1))%mod;
		}
	}
}
signed main()
{
	IOS;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		hash_suffix(a[i]);
	}
	sol();
	cout<<ans;
	return 0;
}
状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现) 内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。 立即下载

相关推荐

Pytorch版deeplabv3+环境配置训练自己的数据集

参考:https://blog.csdn.net/qq_36766560/article/details/110009622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161594607816780266214828%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161594607816780266214828

Ring__Rain的博客 1万+

牛客网多校9 Typing practice(kmp)

题目:n个模式串,一串操作比如aaa-bc-表示在一个空串中加入一个字符,或者在末尾移走一个字符,每次操作后问最少再加几个字符使得后缀中出现至少一个模式串。 思路:普通kmp  T到绝望,一个实例:s数组为aaaaaab-b-b-,t数组是aaaaaaaa,那么每次加入一个b字母,j=nxt[j]就要不停地调到0,这样复杂度会退化为tlen*slen. 这时候需要修改next数组,使两个字符不相...

XFire的博客 535

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3784

2020牛客暑期多校训练营(第二场)(A hash 计数 +kmp next数组 去重)

题目链接 All with Pairs 正在上传…重新上传取消

ccsu_deer 1993

基于STM32的工业设备状态监测系统

工业设备的预测性维护需求日益增长,本文设计了一款基于STM32的智能监测终端,可实时采集设备振动、温度、电流等关键参数,通过边缘计算分析设备健康状态,实现故障预警与能效优化。系统支持4G/LoRa远程通信,适用于工厂、发电站等工业场景。本系统实现了工业设备关键参数的实时监测,故障识别准确率达到92%。:STM32F429(带FPU,支持浮点运算)多参数联合判据(振动+温度+电流突变检测)ACS712电流检测模块(0-30A)FFT频谱分析(识别轴承故障特征频率)故障代码生成(支持16种预设故障类型)

stm32d1219的博客 1323

STM32串口接收避坑指南:为什么你的USART_IT_IDLE中断不触发?附完整调试流程

本文深入解析STM32串口接收中断机制,特别是USART_IT_IDLE中断不触发的常见原因及解决方案。通过详细分析中断标志清除顺序、波特率配置、硬件连接等关键因素,并提供完整的调试流程和代码示例,帮助开发者快速定位并解决串口通信问题。

weixin_42519985的博客 346

牛客-2018多校算法第五场C-KMP

字符串的问题 在原来的字符串中前缀与后缀相同,且原来的中间还含有这个子串; 这里加的num【】数组真是太厉害了,可以直接用来判断中间是否有子串; #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <cst...

weixin_30642305的博客 162

数字信号处理实验:信号谱分析与FFT算法的应用

​ (1)给定信号为 ,其中a为42,b为1。理论分析信号 的频率成分。 (2)分别采用采样频率为 , , , 对 进行采样,其中 , , , ,根据是否满足采样定理要求分析四种采样频率下频谱的分布,在满足采样定理情况下做频谱分析。 (3)任意生成两组有限长信号,对信号分别进行直接卷积和FFT算法求卷积,并分析圆周卷积与线性卷积的关系。

m0_56324525的博客 3201

2020牛客多校第二场A题 All with Pairs Hash+KMP

All with Pairs 题意 记f(s,t)f(s,t)f(s,t)为最大的iii使得s1...i=t∣t∣−i+1...∣t∣s_{1...i} =t_{\left|t\right|-i+1...\left|t\right|}s1...i​=t∣t∣−i+1...∣t∣​ 给nnn个串s1,s2,...,sns_1,s_2,...,s_ns1​,s2​,...,sn​,求∑i=1n∑j=1nf(si,sj)2\displaystyle\sum_{i = 1} ^ n\displaystyle\sum

流水 247

解决银河麒麟V10分辨率问题:xrandr命令详解与常见错误排查

本文详细解析了在银河麒麟V10系统中使用xrandr命令调整屏幕分辨率的方法,包括核心功能解析、常见问题排查及持久化配置技巧。通过实战指南帮助用户解决分辨率缺失、配置失效等典型问题,提升多显示器环境下的工作效率。

weixin_30642561的博客 504

【2021最新版】Dubbo面试题总结(40道题含答案解析)

文章目录1、为什么要用Dubbo?2、Dubbo的整体架构设计有哪些分层?3、默认使用的是什么通信框架,还有别的选择吗?4、服务调用是阻塞的吗?5、一般使用什么注册中心?还有别的选择吗?6、默认使用什么序列化框架,你知道的还有哪些?7、服务提供者能实现失效踢出是什么原理?8、服务上线怎么不影响旧版本?9、如何解决服务调用链过长的问题?10、说说核心的配置有哪些?11、Dubbo推荐用什么协议?12、同一个服务多个注册的情况下可以直连某一个服务吗?13、画一画服务注册与发现的流程图?14、Dubbo集群容错有

程序媛小琬的博客 1万+

2020 杭电多校 Isomorphic Strings (KMP/字符串hash)未完善

2020 杭电多校 Isomorphic Strings (KMP/字符串hash) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6863 题意 给一个字符串 s ,长度为 n ,问是否存在一个 k ,满足 k∣n ,将 s 分成相等的 k 段子串,每一段子串互为循环同构。其中,1≤T≤1000,1≤n≤5⋅106,∑n≤2⋅107。 题解 考虑枚举所有 nn 的因数 kk ,对于每一个 k ,计算出每一个子串的哈希值集合,并且求出第一个子串的所有循环同构的哈希

zhz的博客 182

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5212

2020牛客暑期多校训练营All with Pairs(Hash,前缀函数)

题目描述 Given {n}n strings s_1, s_2, \cdots, s_ns 1 ​ ,s 2 ​ ,⋯,s n ​ . Now define {f(s, t)}f(s,t) as the maximum {i}i that satisfy s_{1\dots i} = t_{|t|-i+1 \dots |t|}s 1…i ​ =t ∣t∣−i+1…∣t∣ ​ , and if such {i}i doesn’t exist, {f(s, t) = 0}f(s,t)=0. The

ZCETHAN 的博客 800

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

2020牛客暑期多校训练营(第二场) All with Pairs (kmp、hash_map)

链接:https://ac.nowcoder.com/acm/contest/5667/A 来源:牛客网 All with Pairs 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 示例1 输入 3 ab ba aba 输出 29 说明 So the answer is 4×12+4×22+1×32=294\times 1^2 + 4\times 2^2 + 1\time..

郭源潮 714

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2020牛客暑期多校训练营(第二场)A All with Pairs

这题难点应该就是去重难想些吧 首先把每个字符串的后缀都hash了存到map里,然后从每个字符串遍历,从前到后,第i个字符串的第j个点字符,我们得到前缀的hash值是x,ans[i][j]=mp[x],然后ans[i][next[j]]-ans[i][j],这就是在去重,next就是kmp的next数组,最后答案是就是 具体描述下这个去重吧,应该会好理解点 就比如现在只有一个字符串ababa mp[a]=1; mp[ba]=1; mp[aba]=1; mp[baba]=1; mp[ababa]=..

天涯沧海的博客 540

【Nowcoder】2020牛客暑期多校训练营(第二场)A - All with Pairs | KMP、字符串Hash

题目链接:https://ac.nowcoder.com/acm/contest/5667/A 题目大意: 给出N个串,你需要求出每个串和其他串的最长相同前后缀 f(i,j)表示i的前缀与j的后缀最大公共长度 题目思路: 考虑到后缀的数量是1e6级别,所以可以先把所有后缀的哈希值储存起来 之后考虑遍历每个串的前缀获得答案 但是此时有一个问题: aba如果被匹配意味着a也会被匹配一次,所以此时的贡献需要去重 如何去重? 就是kmp的fail树了(此时应该说是链) 考虑只保留最长的所.

一只酷酷光儿的博客 517

2020牛客暑期多校训练营(第二场)All with Pairs

传送门:All with Pairs 题意:给你n个字符串,求出,f(si,sj)的意思是字符串 si的前缀和字符串 sj后缀最长相等部分。 题解:先对所有的字符串后缀hash,用map记录每个hash值(后缀)有多少个一样的。这个地方后缀的 hash 值可以将字符串倒过来求,每次乘以base^ i ,这和字符串正着求每次 t=t *base + s 是一样的,可以想象一下,前后...

只能过样例嘤嘤嘤的博客 459

2020牛客暑期多校训练营(第二场)A. All with Pairs

链接 https://ac.nowcoder.com/acm/problem/207123 题意 定义 f(s,t)f(s,t)f(s,t) 为最大的 iii 满足 s1...i=tt−i+1...ts_{1...i}=t_{t-i+1...t}s1...i​=tt−i+1...t​ 求 ∑i=1n∑j=1nf(si,sj)2(mod998244353)\sum_{i=1}^n\sum_{j=1}^n{f(s_i,s_j)^2}\pmod{998244353}∑i=1n​∑j=1n​f(si​,sj​)2(

c4Lnn 的 优快云 博客 241

A.All with Pairs(Hash+Kmp) 2020牛客暑期多校训练营(第二场)

题目都很短就懒得写题意了。 思路: 把每个字符的后缀都用hash表示然后用map存起来算数目。 统计的时候,对于当前的前缀我们可以算出其在后缀中出现的次数。 但问题是这样可能有重复。 解决办法是:cnt[next[i]]−=cnt[i]cnt[next[i]] -= cnt[i]cnt[next[i]]−=cnt[i] 因为假设p1是p2的最长公共前后缀,那么p2对于出现的后缀,被p1对应出现的后缀包含,且不能用,所以减掉。 至于为什么只需要找最长公共前后缀,而不需要找到所有将p1作为后缀的串,是因为如果.

tomjobs的博客 457

2020牛客暑期多校训练营(第二场) A All with Pairs

求第iii个字符串的前缀最大能与所有的字符串的后缀匹配长度的平方和。 首先,字符串匹配相等的问题可以考虑字符串hash。这道题我们发现,hash所有的字符串需要∑(len(si))\sum(len(s_{i}))∑(len(si​)),是可以接受的。那么我们首先进行字符串的hash,统计每一个hash值有多少个。然后从头开始暴力所有的字符串,需要时间∑(len(si))\sum(len(s_{i}))∑(len(si​)),针对前缀第i个串第j个结尾的s[i][j]s[i][j]s[i][j],贡献应该为:

weixin_44019404的博客 208

2020牛客暑期多校训练营(第二场) A All with Pairs KMP+hash

题目求的是前缀与后缀匹配长度平方和。 由于后缀总共就1e6个。 所以我们可以用hash把后缀存下来。 然后枚举每个串的前缀,计算f(s,t)^2. 但这样会重复: 比如 : ab ba aba 枚举s为aba时当t是aba时,a计算了一次,ab也计算了一次,aba又计算了一次。 所以我们从前往后枚举s串的前缀时,要减去与当前 前缀匹配的后缀,与之前前缀匹配的结果。 比如: s为aba时。 枚举到a,有ba,aba 的后缀与它匹配 ,ans+= 2* 1*1; 枚举到ab,有...

bjfu170203101的博客 171

【2019杭电多校训练赛】1006-string matching 题解(e-kmp/扩展kmp)

原题链接:1006-string matching

Drmon.的博客 240

多校一道KMP+DP的题

难啊,多校当时根本不会做 题目描述 White Cloud has a rectangle carpet of n*m. Grid (i,j) has a color colorA[i][j] and a cost costA[i][j]. White Rabbit will choose a subrectangle B of p*q from A and the color of ea...

少说,多做。 3197

2020牛客暑假多校第二场A. All with Pairs

big-small,kmp,AC自动机,dfs序

ACoder 970
上一篇: POJ2356 Find a multiple【前缀和+抽屉原理】
下一篇: 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)I.Simone and graph coloring【最长下降子序列 / 树状数组】
WA自动鸡
博客等级 码龄7年 10粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值