L语言
时间:2019-08-19
本文章向大家介绍L语言,主要包括L语言使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。
一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。
例如字典D中包括单词{‘is’, ‘name’, ‘what’, ‘your’},则文章‘whatisyourname’是在字典D下可以被理解的,因为它可以分成4个单词:‘what’, ‘is’, ‘your’, ‘name’,且每个单词都属于字典D,而文章‘whatisyouname’在字典D下不能被理解,但可以在字典D’=D+{‘you’}下被理解。这段文章的一个前缀‘whatis’,也可以在字典D下被理解,而且是在字典D下能够被理解的最长的前缀。
给定一个字典D,你的程序需要判断若干段文章在字典D下是否能够被理解。并给出其在字典D下能够被理解的最长前缀的位置。
输入格式
输入文件第一行是两个正整数n和m,表示字典D中有n个单词,且有m段文章需要被处理。之后的n行每行描述一个单词,再之后的m行每行描述一段文章。
其中1<=n, m<=20,每个单词长度不超过10,每段文章长度不超过1M。
输出格式
对于输入的每一段文章,你需要输出这段文章在字典D可以被理解的最长前缀的位置。
反正我现在觉得自己那个诡诡奇奇的AC_自动机是错的
#include<bits/stdc++.h> #define re return #define inc(i,l,r) for(int i=l;i<=r;++i) using namespace std; template<typename T>inline void rd(T&x) { char c;bool f=0; while((c=getchar())<'0'||c>'9')if(c=='-')f=1; x=c^48; while((c=getchar())>='0'&&c<='9')x=x*10+(c^48); if(f)x=-x; } const int maxn=9000; int n,m,tot; int AC[maxn][26],ed[maxn],fail[maxn],f[1500000],dis[maxn]; char s[1500000]; inline void clean(int x) { inc(i,0,25)AC[x][i]=0; ed[x]=fail[x]=0; } inline void build() { int len=strlen(s); int now=0; inc(i,0,len-1) { if(!AC[now][s[i]-'a']) { AC[now][s[i]-'a']=++tot; clean(tot); } now=AC[now][s[i]-'a']; } ed[now]=1; dis[now]=len; } inline void Get_fail() { queue<int>Q; inc(i,0,25) { if(AC[0][i]) Q.push(AC[0][i]); } while(!Q.empty()) { int u=Q.front(); Q.pop(); inc(i,0,25) { if(AC[u][i]) { fail[AC[u][i]]=AC[fail[u]][i]; Q.push(AC[u][i]); } else AC[u][i]=AC[fail[u]][i]; } } } inline void Get_ans() { int now=0,ans=0; int len=strlen(s+1); inc(i,1,len) { f[i]=0; now=AC[now][s[i]-'a']; for(int t=now;t;t=fail[t]) if(ed[t]) f[i]|=f[i-dis[t]]; //如果这个位置的单词前的 f[i-dis[t]]是成立的 if(f[i])ans=i; } printf("%d\n",ans) ; } int main() { freopen("in.txt","r",stdin); rd(n),rd(m); inc(i,1,n) { scanf("%s",s); build(); } Get_fail(); f[0]=1; inc(i,1,m) { scanf("%s",s+1); Get_ans(); } re 0; }
还是trie树+dp比较暴力又安全
#include<bits/stdc++.h> #define static #define re return #define supervisor liangsiyi #define inc(i,l,r) for(int i=l;i<=r;++i) #define dec(i,l,r) for(int i=l;i>=r;--i) using namespace std; const int N=1500000; int n,m,tot,sum,tree[260][26],val[250],p[N]; char s[N]; void insert() { int l=strlen(s),r=0,x; sum=max(l,sum); for(int i=0;i<l;r=tree[r][s[i]-'a'],++i) if(!tree[r][s[i]-'a']) tree[r][s[i]-'a']=++tot; val[r]=1; } void viv(int sss) { int l=strlen(s+1),ans=0; p[0]=sss; inc(i,0,l) { if(p[i]!=sss)continue;else ans=i; int r=0; inc(j,i+1,l) { r=tree[r][s[j]-'a']; if(!r)break; if(val[r])p[j]=sss; } } printf("%d\n",ans); } int main() { scanf("%d%d",&n,&m); inc(i,1,n){scanf("%s",s);insert();} inc(i,1,m){scanf("%s",s+1); viv(i);} re 0; }
原文地址:https://www.cnblogs.com/lsyyy/p/11375318.html
- 一步步教你弹性框架-中篇
- 细说ReactiveCocoa的冷信号与热信号系列(2)
- 谈谈个人网站的建立(三)—— 定时任务
- 细说ReactiveCocoa的冷信号与热信号系列(1)
- 【美团技术团队博客】前端组件化开发实践
- Spring中Bean
- 跟Google学写代码--Chromium/base--windows_version源码学习及应用
- 一步步教你弹性框架-下篇
- R语言与机器学习(分类算法)朴素贝叶斯算法
- 【美团技术团队博客】RACSignal的Subscription深入分析
- 谈谈个人网站的建立(八)—— 缓存的使用
- 【编程基础】System.arraycopy()和 Arrays.copyOf()
- 移动端 模拟手机联系人触摸A~Z导航
- 谈谈个人网站的建立(七)—— 那些建站必备的插件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Shiro——基于java的安全框架
- 电子圆二色谱(ECD)的理论计算
- 用 80 行 Javascript 代码构建自己的语音助手
- 手把手教你搭建分布式项目环境
- GraphQL两年实战避坑经验
- 基于Dubbo的服务提供者与消费者的发布(在虚拟机中)以及使用nginx对项目进行负载均衡优化
- 我们为什么不使用CSS框架
- java.lang.IllegalArgumentException: node to traverse cannot be null!
- Spring Data Jpa 异常:PropertyReferenceException: No property xxx found for type for type yyy
- Spring全家桶之SpringData——SpringData Redis(附相关jar包)
- Spring全家桶之SpringBoot——初级阶段
- Spring全家桶之SpringBoot——高级阶段
- feign.FeignException$MethodNotAllowed: status 405 reading xxx#yyy(Integer)
- No serializer found for class 类名 and no properties discovered to create BeanSerializer
- 三步让你在Linux中发布SpringCloud项目