字符串-----KMP竟然是18禁

今天学了一下午字符串,讲到结束也没讲KMP。有人问老师为什么不讲,老师来一句:字符串noip不考,而且还是18禁,自然不讲。【手动滑稽】

所以我也不讲。【微笑】

1.表达式树

表示3+5*8

最后计算的符号是根节点,是一课二叉树,左右子树可以是数或式。

例题:表达式计算

代码如下

/*
10+(2+3)*4
30
*/#include <iostream>
#include <stack>
#include <cstring>
using namespace std;const int MAXN = 10000 + 10;
char str[MAXN];int solve(int l, int r) // 璁$畻杈撳叆鐨勮〃杈惧紡[l,r]鍐呯殑鍊?
{// 鎵炬渶鍚庝竴涓绠楃殑浣嶇疆int pos=-1;int flag=0;int level=2; // 0:+- 1:*/for(int i=l;i<=r;i++){if(str[i]=='(')flag++;if(str[i]==')')flag--;if(flag == 0 && (str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')){int l=-1;switch(str[i]){case '+':case '-':l=0;break;case '*':case '/':l=1;break;}if(level >= l){level=l;pos=i;}}}if(pos==-1){if(str[l]=='('&&str[r]==')') return solve(l+1,r-1);int x=0;for(int i=l;i<=r;i++)x=x*10+str[i]-'0';return x;}int a = solve(l, pos-1);int b = solve(pos+1, r);int ans;switch(str[pos]){case '+':ans=a+b;break;case '-':ans=a-b;break;case '*':ans=a*b;break;case '/':ans=a/b;break; // 3*2/3
    }return ans;
}
int main()
{cin >> (str+1);cout << solve(1, strlen(str+1)) << endl;return 0;
}

这道题还有一个栈的做法

代码如下

/*
1+(2+3)*4
21
*/
// 鍋囪杈撳叆鐨勬暟瀛楀湪[0,9]

#include <iostream>
#include <stack>
using namespace std;const int MAXN = 10000 + 10;
char str[MAXN];
stack<int> nums;
stack<char> symbol;void pop()
{int a = nums.top();nums.pop();int b = nums.top();nums.pop();char s = symbol.top();symbol.pop();int ans;switch(s){case '+':ans=a+b;break;case '-':ans=b-a;break;case '*':ans=a*b;break;case '/':ans=b/a;break; // 3*2/3
    }nums.push(ans);
}
int main()
{cin >> (str+1);for(int i=1;str[i]!=0;i++){char c=str[i];if('0'<=c&&c<='9'){nums.push(c-'0');} else {if(c==')'){while(symbol.top() != '(') pop();symbol.pop();} else if (c=='+' || c=='-'){while(!symbol.empty()&&symbol.top()!='+'&&symbol.top()!='-'&&symbol.top()!='(') pop();symbol.push(c);} else symbol.push(c);}}while(!symbol.empty())pop();cout<<nums.top()<<endl;return 0;
}

2.hash(搞一个233进制数)&&trie树

例题:字符串统计

const int P = 673, MOD = 1000007;int hash(char* str)
// 瑕佹眰鐩稿悓瀛楃涓茶繑鍥炵殑瀛楃涓插繀椤荤浉鍚?
// 涓嶅悓鐨勫瓧绗︿覆杩斿洖鍊煎敖閲忎笉鍚?
{int ans=0;for(int i=0;str[i];i++)ans=(ans*P+str[i])%MOD;return ans;
}
vector<string> L[MOD];
int main()
{int n;cin >> n;char str[100 + 10];while(n--){cin>>str;int h=hash(str);bool same=false;for(int i=0;i<(int)L[h].size()&&!same;i++)if(str==L[h][i])same=true;puts(same ? "YES" : "NO");if(!same) L[h].push_back(str);}
}
/*hash*/
const int MAXN = 100000 + 10;struct Node
{int son[26];int mark;
};
Node tree[MAXN*10];
int root=0, op=0;bool insert(char* str) // 鎻掑叆瀛楃涓诧紝杩斿洖璇ュ瓧绗︿覆鏄惁宸茬粡鍑虹幇杩?
{int pos=root;for(int i=0;str[i];i++){int c=str[i]-'a';if(tree[pos].son[c] == 0) tree[pos].son[c] = ++op;pos = tree[pos].son[c];}int mark=tree[pos].mark;tree[pos].mark=1;return mark!=0;
}
int main()
{int n;cin >> n;char str[100 + 10];while(n--){cin>>str;puts(insert(str) ? "YES" : "NO");}
}
/*trie树*/

例题:情书

const int MAXN = 100000 + 10;struct Node
{int son[26];int mark;int time; // 琛ㄧず鏈€鏂板尮閰嶇殑鏄摢鍙ヨ瘽
};
Node tree[MAXN*10];
int root=0, op=0;
char str[1000000 + 10];
int cnt, ans;
// cnt琛ㄧず褰撳墠姝e湪澶勭悊鐨勫崟璇嶆槸绗嚑鍙ヨ瘽void insert(char* str) // 鎻掑叆瀛楃涓?
{int pos=root;for(int i=0;str[i];i++){int c=str[i]-'a';if(tree[pos].son[c] == 0) tree[pos].son[c] = ++op;pos = tree[pos].son[c];}tree[pos].mark=1;
}
void search(char* str)
{int pos=root;for(int i=0;str[i];i++){int c=str[i]-'a';if(tree[pos].son[c] == 0) return;pos = tree[pos].son[c];}if(tree[pos].mark==1 && tree[pos].time!=cnt)ans++;tree[pos].time=cnt;
}
int main()
{int n;cin >> n;while(n--){cin>>str;insert(str);}cnt=1;while(cin>>str){int len=strlen(str);bool juzi=false;if(str[len-1]=='.'){juzi=true;str[len-1]='\0';}search(str);if(juzi){cout<<ans<<endl;ans=0;cnt++;}}
}

例题:LCP(最长公共前缀hash做法)

const int P = 637, MOD = 1000000007;
char str[MAXN];
long long H[MAXN];
long long POW[MAXN];int main()
{cin>>str+1;n=strlen(str+1);for(int i=1;i<=n;i++)H[i]=(H[i-1]*P+str[i])%MOD;POW[0]=1;for(int i=1;i<=n;i++)POW[i]=(POW[i-1]*P)%MOD;int A, B;while(cin>>A>>B){int l=0, r=min(n-A+1, n-B+1), mid;while(l<r){mid=(l+r)/2+1; // l=0, r=1 [0, 1]/[-1, 0]// h1涓簊tr[A~A+mid-1]鐨刪ash鍊?long long h1=((H[A+mid-1]-H[A-1]*POW[mid])%MOD+MOD)%MOD;long long h2=((H[B+mid-1]-H[B-1]*POW[mid])%MOD+MOD)%MOD;if(h1==h2)l=mid;else r=mid-1;}}
}// -9 % 4 = (-1 + 4) % 4 = 3

 

转载于:https://www.cnblogs.com/ZDHYXZ/p/8432843.html

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

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

相关文章

里bl2和bl3为什么分开_英国的水池为什么有两个水龙头?为什么英国有独立的冷热水龙头?...

如果大家看过我之前的文章&#xff0c;可能会有点映像&#xff0c;前面有提到过英国的双水龙头&#xff0c;有兴趣的朋友们可以点后面的直达链接查看&#xff1a;为什么在英国留学会掉头发&#xff1f;怎么办&#xff1f;英国的自来水&#xff08;冷水&#xff09;可以直接喝吗…

三剑客 老大:awk命令用法

awk是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一 个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在命令行中使用&…

Mockito –带有注释和静态方法的额外接口

在代码中&#xff0c;我最近遇到了一段非常糟糕的代码&#xff0c;这些代码基于对对象执行某些操作的类转换。 当然&#xff0c;代码需要重构&#xff0c;但是如果您首先没有对该功能进行单元测试&#xff0c;则有时您可能无法做到/或者不想这样做&#xff08;这应该是可以理解…

怎么把原来的墙拆掉_家装拆除不是简单的砸砸墙,它也是有技术的

装修拆除中有很多人认为&#xff0c;拆除施工没有什么技术含量&#xff0c;感觉就像小品演的那样&#xff0c;挥挥大锤砸砸墙就可以了。所以有的人图便宜就从马路上随便找的工人来砸墙&#xff0c;他们不管是不是承重墙&#xff0c;只要业主要求他们就敢咋&#xff0c;后果真有…

20180209-os模块

下面将学习关于os模块的相关操作 项目练习的目录结构如下&#xff1a;所有的操作都是基于os_exercise.py模块 1.获取当前的Python脚本的工作目录路径 os.getcwd() # 1.获取当前目录 dir os.getcwd() print(获取当前python脚本工作目录:,dir) # 输出 # 获取当前python脚本工作目…

关于IE6.7.8.FF兼容的问题

所有浏览器 通用 height: 100px; IE6 专用 _height: 100px;IE6 专用 *height: 100px; IE7 专用 * height: 100px; IE7、FF 共用 height: 100px !important; 一、CSS 兼容 以下两种方法几乎能解决现今所有兼容. 1, !important (不是很推荐&#xff0c;用下面的一种感觉最安…

冯珊珊_模拟器企业衡泰信签约冯珊珊,推动高尔夫运动下沉

9月21日&#xff0c;著名高尔夫模拟器企业衡泰信宣布签约中国高尔夫球员冯珊珊&#xff0c;双方正式达成全面战略合作&#xff0c;旨在共同推动室内高尔夫运动的普及与推广&#xff0c;让更多人参与并喜爱上这项运动&#xff0c;推动全民健身目标&#xff0c;借助互联网、智慧场…

CSS3之background的调整和增加的属性

对于background做了一些修改&#xff0c;最明显的一个就是采用设置多背景&#xff0c;不但添加了4个新属性&#xff0c;并且还对目前的属性进行了调整增强。 1、多个背景图片 在css3里面&#xff0c;你可以再一个标签元素里应用多个背景图片。代码类似与css2.0版本的写法&…

html 天气特效,用CSS制作天气特效动画,源码分享

效果图今天给大家带来的是CSS3动画天气图标代码&#xff0c;简单实用好看&#xff01;CSS源码&#xff1a;html { box-sizing: border-box; }html *,html *:before,html *:after { box-sizing: inherit; }body {max-width: 42em;padding: 2em;margin: 0 auto;color: #161616;fo…

做折线图坐标轴数字_Excel折线图表的另类表达制作?牛闪君使用了双线表达法来完成...

牛闪闪办公第846个原创技巧Zloffice社群的小伙伴还是很爱学习的&#xff0c;这不&#xff0c;有一位小伙伴看到“特殊”图表表达&#xff0c;想知道是怎么做出来的。这种学习的思路非常好&#xff0c;看到好的表达就想学习&#xff0c;这是非常好的收集习惯&#xff0c;能够积累…

Spring MVC:表单处理卷。 5 –选择,选项,选项标签

下拉列表是Web表单中最常见的元素之一。 在HTML中&#xff0c;可以使用适当的标签创建此类控件&#xff1a; <form&#xff1a;select> –下拉列表的父标签和<form&#xff1a;option> – <form&#xff1a;select>标签的子标签。 Spring MVC标签库为下拉列表…

Python的看门狗实现自动化实时对服务器、Windows或Linux文件夹的实时监控

众所周知&#xff0c;在运维过程中&#xff0c;实时获取目标文件夹至关重要&#xff0c;Python的watchdog是用程序来监视文件系统事件Python库&#xff0c;所以用该库可以实现对文件夹的实时监控&#xff0c;filenotify.py代码如下&#xff1a; # -*- coding: utf-8 -*- #!/usr…

在html中样式表的三种类型,css样式有哪几种类型?

CSS样式可以写在哪些地方呢&#xff1f;从CSS 样式代码插入的形式来看基本可以分为以下3种&#xff1a;内联式、嵌入式和外部式三种。下面本篇文章就来给大家介绍一下CSS样式的类型&#xff0c;希望对大家有所帮助。内联式样式内联式css样式表就是把css代码直接写在现有的HTML标…

记录合规性–关于TCK,规格和测试

使用软件规格非常困难。 不论在哪个地方提出&#xff1b; 您最终遇到了一个大问题&#xff1a;是否已实施并测试了所有指定的内容&#xff1f; 在瀑布驱动的方法学时代&#xff0c;这一直是一个问题&#xff0c;即使在撰写本文的今天&#xff0c;敏捷性和用户故事仍然不能保证您…

arcgis已试图对空几何执行该操作_ArcGIS中地理配准与空间校正的不同

ArcGIS中地理配准与空间校正都是用于数据坐标变换的目的&#xff0c;他们之间有什么区别呢&#xff1f;1、处理对象不同&#xff1a;地理配准针对栅格数据&#xff0c;而空间校正针对矢量数据。因此空间校正需要建立在矢量数据编辑的基础上&#xff0c;空间校正之前应开始编辑。…

【计算机视觉】深度学习视觉领域常用数据集汇总

本文结合笔者在研究生学习、科研期间使用过以及阅读文献了解到的深度学习视觉领域常用的开源数据集&#xff0c;进行介绍和汇总。MNIST深度学习领域的“Hello World!”&#xff0c;入门必备&#xff01;MNIST是一个手写数字数据库&#xff0c;它有60000个训练样本集和10000个测…

JavaScript高级特征之面向对象笔记

Javascript面向对象&#xff1a;函数&#xff1a; * Arguments对象&#xff1a; * Arguments对象是数组对象 * Arguments对象的length属性可以获取参数的个数 * 利用Arguments对象模拟函数的重载效果&#xff08;javascript中不存在函…

绘图用计算机软件的基本种类有,主编教您电脑绘图软件有哪些

绘图软件是指专业人员根据一定准则设计的用于计算机绘图软件程序&#xff0c;种类非常多&#xff0c;通过它们可以满足足广大用户的基本绘图要求。下面&#xff0c;我就给大家介绍电脑绘图软件有哪些。电脑是根据指令进行高速计算的电子设备&#xff0c;功能强大&#xff0c;时…

HTML浮动导致高度塌陷,HTML 文档流,设置元素浮动,导致父元素高度无法自适应的解决方法(高度欺骗)...

元素浮动定义float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像&#xff0c;使文本围绕在图像周围&#xff0c;不过在 CSS 中&#xff0c;任何元素都可以浮动。浮动元素会生成一个块级框&#xff0c;而不论它本身是何种元素。如果浮动非替换元素&#xff0c;则要指定…

Python API简单验证

前言 因为CMDB内部的需求&#xff0c;需要一个API进行数据传输&#xff0c;用来传递需要抓取的服务端信息信息给抓取的autoclient&#xff0c;autoclient抓取好之后再通过API传输到服务器&#xff0c;保存到数据库。但是为了防止恶意的API访问&#xff0c;需要做一个验证。 设想…