CF25E:Test——题解
https://vjudge.net/problem/CodeForces-25E
题目大意:给三个字符串,求最小串,使得前三个串都是它的子串。
————————————————
这题虽然是看哈希的时候做的,但上网一查啊全是KMP。
所以果断用KMP做啦!
(话说网上的题解长得都一模一样一个字都没改所以就不贴了)
对于三个串共六种排法,排列组合一下然后在把他们重合的部分减去就会是答案。
而发现对于两个字符串ab去重,我们有两种情况:
1.a的尾部是b的头部:
通过KMP解决,输出KMP后(即a被匹配完了)b被匹配到哪里了,即是ab重合长度。
2.b是a的子串:
上述KMP还有一个目的就是为了判断是否为子串,如果是的话,跳过b,a和下一个字符串相接。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=;
int nxt[][]={};
bool ok[];
void getnext(int m,char s2[],int t){
int j=;
for(int i=;i<=m;i++){
while(j!=&&s2[j+]!=s2[i])j=nxt[t][j];
if(s2[j+]==s2[i])j++;
nxt[t][i]=j;
}
return;
}
int KMP(int n,int m,char s1[],char s2[],int t){
int j=,cnt=;
for(int i=;i<=n;i++){
while(j!=&&s2[j+]!=s1[i])j=nxt[t][j];
if(s2[j+]==s1[i])j++;
if(j==m){
return -;
j=nxt[t][j];
}
}
return j;
}
char s[][];
int len[];
int K[][];
int main(){
scanf("%s%s%s",s[]+,s[]+,s[]+);
len[]=strlen(s[]+);
len[]=strlen(s[]+);
len[]=strlen(s[]+);
for(int i=;i<=;i++){
getnext(len[i],s[i],i);
for(int j=;j<=;j++){
if(i==j)continue;
K[j][i]=KMP(len[j],len[i],s[j],s[i],i);
}
}
int ans=INF;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
if(i==j||j==k||i==k)continue;
int sum=len[i]+len[j]+len[k]-K[i][j]-K[j][k];
if(K[i][j]>=&&K[j][k]>=)ans=min(ans,sum);
else{
if(K[i][j]<&&K[i][k]<)ans=min(ans,len[i]);
else if(K[i][j]<)ans=min(ans,sum+K[i][j]+K[j][k]-len[j]-K[i][k]);
if(K[j][k]<)ans=min(ans,sum+K[j][k]-len[k]);
}
}
}
}
printf("%d\n",ans);
return ;
}
CF25E:Test——题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 「国庆训练&知识学习」图的最大独立集与拓展(Land of Farms,HDU-5556)
题意 一个\(N*M\)的矩阵,其中"."代表空地,"0-9"代表古代建筑,我们如果选择了一个编号的古代建筑想要建立,那么对应就要将全部该编号的建筑建立起来,如 ...
- mysql面试常见题目3
三十六大 冯唐 春水初生, 春林初盛, 春风十里,不如你. 秋风落叶, 秋雨绵绵, 愁心上秋,只为你. 某个员工信息表结构和数据如下: id name dept salary edlevel hire ...
- 【第四章】Shell 条件测试表达式
shell中条件测试的三种格式: 格式1: test 条件表达式格式2: [ 条件表达式 ]格式3: [[ 条件表达式 ]] 使用test: [root@host- ~]# test -f file ...
- 机器学习实战笔记一:K-近邻算法在约会网站上的应用
K-近邻算法概述 简单的说,K-近邻算法采用不同特征值之间的距离方法进行分类 K-近邻算法 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用范围:数值型和标称型 ...
- 并查集(Union/Find)模板及详解
概念: 并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图.求最小生成树的Kruskal 算法和求最近公共祖先等. 操作: 并查集的基本操作有两个 ...
- 如何遍历一个文件夹(C语言实现)
#include<io.h> #include<stdio.h> int main() { long Handle; struct _finddata_t FileInfo; ...
- 如果jsp表单元素的值为空,如何避免null出现在页面上?
可以写一个简单的函数对空值进行处理,判断值是否为空,如果是空就返回空字符串.实例代码如下: <%! String blanknull(String s) { return (s == null) ...
- LintCode-69.二叉树的层次遍历
二叉树的层次遍历 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 返回他的分层遍历结果: [ [3], [9,2 ...
- matlab的二维卷积操作(转)
MATLAB的conv2函数实现步骤(conv2(A,B)): 其中,矩阵A和B的尺寸分别为ma*na即mb*nb ① 对矩阵A补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都 ...
- 【重读MSDN之ADO.NET】ADO.NET连接
连接到ADO.NET中的数据源 在 ADO.NET 中,通过在连接字符串中提供必要的身份验证信息,使用 Connection 对象连接到特定的数据源.使用的 Connection 对象取决于数据源的类 ...