题面

Description
Will相信,很多同学都有过这样的经历:大牛已经写好了编程作业,而作为菜鸟的自己不会写怎么办呢?拿大牛的代码抄一下嘛!但是提交一模一样的作业是不是不太好?于是就改一改变量名什么的……但是其实这样的代码抄袭行为是可以被检测出来的。

考虑到如下的两段代码,很容易发现他们其实是一样的。

那么最开始给出的两段雷同代码就可以分别写成AiBjCiDECjDiFGC以及AaBiCaDECiDaFGC。或者简单的说,我们认为这两段代码是一样的。

现在请写一个程序,处理若干这样的代码雷同检测问题:给一个完整代码以及一个较短的代码片段,请求出,这个代码片段在完整代码中一共出现了多少次(代码片段出现的位置可以重叠)。

为了简单起见,我们认为程序中只会至多出现a~z这26个变量,同时也至多只有A~Z这26个非变量符号。

题解

所以说我讨厌字符串……

不难看出题目的意思就是大写字母必须完全相等,小写字母可以有替换

大写字母\(KMP\)就行了,考虑小写字母该怎么搞

我们把每个小写字母的权值改成上一个这个小写字母到它的距离,那么两个小写字母相等要么它们都是在串中第一次出现,要么它们的权值相等

于是就可以跑\(KMP\)了

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=1e6+5;
char s[N],t[N];int kmp[N],vs[N],vt[N],las[255];
int n,m,T,res;
bool equal(R int x,R int y,R int len){return x==y||x>=len&&y>=len;}
void solve(){scanf("%s%s",s+1,t+1),n=strlen(s+1),m=strlen(t+1);memset(las,0,sizeof(las));fp(i,1,n)if(s[i]>'Z')vs[i]=i-las[s[i]],las[s[i]]=i;else vs[i]=-s[i];memset(las,0,sizeof(las));fp(i,1,m)if(t[i]>'Z')vt[i]=i-las[t[i]],las[t[i]]=i;else vt[i]=-t[i];kmp[0]=kmp[1]=0;for(R int i=2,j=0;i<=m;++i){while(j&&!equal(vt[j+1],vt[i],j+1))j=kmp[j];j+=equal(vt[j+1],vt[i],j);kmp[i]=j;}res=0;for(R int i=0,j=0;i<=n;++i){while(j&&!equal(vt[j+1],vs[i],j+1))j=kmp[j];j+=equal(vt[j+1],vs[i],1);if(j==m)++res,j=kmp[j];}printf("%d\n",res);
}
int main(){
//  freopen("testdata.in","r",stdin);int T;scanf("%d",&T);while(T--)solve();return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10326516.html

jzoj3208. 【JSOI2013】编程作业(kmp)相关推荐

  1. 软件工程网络15结对编程作业

    软件工程网络15结对编程作业 1.项目成员 学号:201521123014 博客地址:http://www.cnblogs.com/huangsh/ 学号: 201521123102 博客地址:htt ...

  2. Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2

    吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...

  3. Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1

    吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...

  4. python第六周实验_机器学习 | 吴恩达机器学习第六周编程作业(Python版)

    实验指导书    下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...

  5. 结对编程作业——四则运算

    Github项目地址 PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 10 · Estimat ...

  6. 监督学习-逻辑回归及编程作业(一)

    一.Logistic回归--分类 对于分类问题,采用线性回归是不合理的. 1.假设函数(logistic函数/Sigmoid函数): 注:假设函数 h 的值,看作结果为y=1的概率估计.决策界限可以看 ...

  7. 代写SOFTENG 370 Operating Systems课设、代做C/C++ 留学生作业、代写c/c++代码、代写C/C++编程作业...

    代写SOFTENG 370 Operating Systems课设.代做C/C++ 留学生作业.代写c/c++代码.代写C/C++编程作业 SOFTENG 370 Operating Systems ...

  8. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...

    代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...

  9. python机械编程_机器学习编程作业3——多类分类(Python版)

    本次编程作业的实现环境是Python3.Anaconda3(64-bit).Jupyter Notebook.是在深度之眼"机器学习训练营"作业基础上完成的,个别代码有修改,供交流 ...

最新文章

  1. 如何居中一个浮动元素?
  2. 防抖技术 | OpenCV实现视频稳流
  3. 2020年,这些学者归国任教
  4. 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )
  5. Shi-Tomasi算子的运用 ,用于检测角点
  6. 优化Nginx服务的安全配置
  7. 阿里云资深专家李国强:云原生的一些趋势和新方向
  8. 1045: 愚人节的礼物
  9. 清除webkit浏览器css设置滚动条
  10. 用groovy采集网页数据
  11. 1979. 找出数组的最大公约数
  12. 数字图像处理概述PPT学习1
  13. C语言error2005,关于ERROR LNK 2005错误
  14. 辅助脚本使用教程手册
  15. python爬取有道翻译的代码_有道翻译的爬取
  16. opencv-牛刀小试
  17. 线性代数学习之特征值与特征向量
  18. Halcon深度学习-目标检测-Rectangle1
  19. Eclipse中pep8规范,修改每行字符长度
  20. Android-APP隐私合规检测

热门文章

  1. 云计算机网络有限公司,目前市面3种主流的云桌面
  2. 普里姆 克鲁斯卡尔算法
  3. 最新最全的 layUI 框架使用教程视频教程分享
  4. 图解http协议 部分笔记
  5. EXCEL 十进制角度转换为度分秒格式
  6. 手把手教你输出1000到2000之间的闰年
  7. c语言 源程序代码,编程(C语言源程序代码)
  8. 2020遥感应用组二等奖:基于LiDAR和资源三号数据的广西高峰林场森林资源三维动态监测
  9. 仿牌外贸网店被DMCA移除的解决方案
  10. MYSQL数据库备份方法及策略