加密

本文介绍一种特殊的字符串匹配算法,该算法用于计算通过特定方式加密的字符串中,有多少子串可以还原为原始字符串。文中提供了详细的算法实现思路,并附带源代码示例。

!!!試題來自清北!!!

【问题描述】
有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符。 相应的,
不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符。
给定原文s和加密后的字符串t,求?有多少子串可以通过解密得到原文s。
【输入格式】
输入第一行包含一个字符串t,第二行包含一个字符串s。
【输出格式】
输出一行,包含一个整数,代表可以通过解密得到原文的t的子串的数量。
【样例输入】
abcabcabc
cba
【样例输出】
9
【样例解释】
用[l,r]表示子串开头结尾的下标(从 0 开始编号) ,这 9 种方案是:
[0,6],[0,7],[0,8],[1,6],[1,7],[1,8],[2,6],[2,7],[2,8]
【数据规模和约定】
30%的数据,|l| 1000。
对于100%的数据,1 ≤ |l| ≤ 300,000,1 ≤ s ≤ 200。

有一種不講道理的算法,方案數+=(l+1)*(r+1)。

有一種更不講道理的去重方法,方案數-=(這次及前次中較小的l+1)*(這次及前次中較大的r+1)。

這裡的[l,r]指最窄的滿足條件的區間(即該區間對應的t的子串中依次出現組成s的字符,且t[l]==s[0],t[r]==s[ls-1]。)(不要理解成只有一組區間)。

代碼實現:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 long long lt,ls,jl[2],ans;//注意开long long。
 6 char t[3000000],s[300];
 7 bool p;
 8 void sf(long long x,long long y,long long z){
 9 if(y==ls){
10 ans+=(z+1)*(lt-x+1);//無理的公式應用。
11 if(jl[1]-jl[0]>=ls-1) ans-=(min(jl[0],z)+1)*(lt-max(jl[1],x-1));//無理的公式應用。
12 jl[0]=z;jl[1]=x-1;//只需要存下上一組就夠了。
13 return;
14 }
15 for(int i=x;i<lt;i++){
16 if(t[i]==s[y]){
17 if(y) {sf(i+1,y+1,z);break;}//break確保找的是最窄的合法區間。
18 else sf(i+1,y+1,i);//i存左端點。
19 }
20 }
21 }
22 int main(){
23 freopen("encrypt.in","r",stdin);
24 freopen("encrypt.out","w",stdout);
25 cin>>t>>s;
26 lt=strlen(t);ls=strlen(s);
27 sf(0,0,0);
28 cout<<ans<<endl;
29 return 0;
30 }
View Code

有時候不要嘗試打開一些很大的輸入文件,數據流失會坑死你,我就調了一個多小時的AC代碼(當時沒過是數據範圍開小了,考試注意臨終檢查)。。。

转载于:https://www.cnblogs.com/J-william/p/6056787.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值