E. Compress Words

直接套 KMP 即可(那为什么打 cf 的时候没有想到...),求出后一个单词(word)的前缀数组,然后从前面已得的字符串的末尾 - word. length () 开始查询利用前缀数组进行优化即可

代码:

// Created by CAD on 2019/8/12.
#include <bits/stdc++.h> using namespace std;
using pii=pair<int, int>;
using piii=pair<pair<int, int>, int>;
using ll=long long; const int maxn=1e6+5;
int nxt[maxn];
void get_next(string s)
{
int i=0,j=-1;nxt[0]=-1;
int n=s.length();
while(i<n)
{
if(j==-1||s[i]==s[j])
nxt[++i]=++j;
else j=nxt[j];
}
}
string ans,word;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
for(int i=1;i<=n;++i)
{
cin>>word;
int wlen=word.length();
int alen=ans.length();
get_next(word);
int match=0;
for(int j=max(alen-wlen,0);j<alen;++j)
{
while(match>0&&ans[j]!=word[match]) match=nxt[match];
if(ans[j]==word[match]) match++;
}
ans+=word.substr(match);
}
cout<<ans<<endl;
return 0;
}

最新文章

  1. JDBC之——一个单线程JDBC基类和一些注意事项
  2. sql查看数据字典(表结构)
  3. 《c程序设计语言》读书笔记-字符型0-9转为数字0-9
  4. 高性能网络I/O框架-netmap源码分析
  5. UBOOT的多支持性与可裁剪性
  6. WPF自定义圆形按钮样式资源文件
  7. leetcode第12题--Integer to Roman
  8. thinkphp后台ajaxReturn提示下载的问题
  9. cmder中文乱码、文字重叠等问题
  10. 如何改变XCode的默认设置
  11. bnu——GCD SUM (莫比乌斯反演)
  12. redis集群之主从架构
  13. Machine Learning--week3 逻辑回归函数(分类)、决策边界、逻辑回归代价函数、多分类与(逻辑回归和线性回归的)正则化
  14. Android View体系(六)从源码解析Activity的构成
  15. python技巧 一等函数
  16. jmeter之最佳实践
  17. Struck 跟踪算法(二)
  18. Tensorflow设置显存自适应,显存比例
  19. python 源码安装
  20. GIS(地理信息系统)

热门文章

  1. Java switch case 语句
  2. ITCAST-C# 委托
  3. 只读字段(readonly)和常量(const)
  4. FreeBSD上编写x86 Shellcode初学者指南
  5. CentOS7部署kettle
  6. python 运算符与流程控制
  7. deep_learning_Function_LSTM_dynamic_rnn
  8. linux主机之间的SSH链接
  9. iptables 设置特定IP访问指定端口
  10. docker 安装 mxnet