HDU 4679 String
String
Total Submission(s): 695 Accepted Submission(s): 254
a) D is the subsequence of A
b) D is the subsequence of B
c) C is the substring of D
Substring here means a consecutive subsequnce.
You need to output the length of D.
For each test case, the first line only contains string A, the second line only contains string B, and the third only contains string C.
The length of each string will not exceed 1000, and string C should always be the subsequence of string A and string B.
All the letters in each string are in lowercase.
aaaaa
aaaa
aa
abcdef
acebdf
cf
Case #2: 3
For test one, D is "aaaa", and for test two, D is "acf".
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <cstdio>
- #define N 1100
- using namespace std;
- string s1,s2,s3,s4,s5;
- char temp[N];
- int num1[N][N],num2[N][N];
- struct num
- {
- int sta,end;
- } a[N],b[N];
- int main()
- {
- //freopen("data.in","r",stdin);
- void get(int (*p)[N],string ch1,string ch2);
- int t,tem=1;
- scanf("%d",&t);
- while(t--)
- {
- cin>>s1>>s2>>s3;
- get(num1,s1,s2);
- int l1 = s1.size();
- for(int i=0; i<=l1-1; i++)
- {
- temp[l1-1-i] = s1[i];
- }
- temp[l1] = '\0';
- s4 = temp;
- int l2 = s2.size();
- for(int i=0; i<=l2-1; i++)
- {
- temp[l2-1-i] = s2[i];
- }
- temp[l2] = '\0';
- s5 = temp;
- get(num2,s4,s5);
- int l3 = s3.size(),Top1=0,Top2=0;
- for(int i=0; i<=l1-1; i++)
- {
- if(s1[i]==s3[0])
- {
- int x = 0;
- int sta = i;
- int end = -1;
- for(int j=i; j<=l1-1&&x<=l3-1; j++)
- {
- if(s1[j]==s3[x])
- {
- x++;
- }
- if(x==l3)
- {
- end = j;
- }
- }
- if(end==-1)
- {
- continue;
- }
- a[Top1].sta = sta;
- a[Top1++].end = end;
- }
- }
- for(int i=0; i<=l2-1; i++)
- {
- if(s2[i]==s3[0])
- {
- int x = 0;
- int sta = i;
- int end = -1;
- for(int j=i; j<=l2-1&&x<=l3-1; j++)
- {
- if(s2[j]==s3[x])
- {
- x++;
- }
- if(x==l3)
- {
- end = j;
- }
- }
- if(end==-1)
- {
- continue;
- }
- b[Top2].sta = sta;
- b[Top2++].end = end;
- }
- }
- int res = l3,Max=0;
- for(int i=0; i<=Top1-1; i++)
- {
- for(int j=0; j<=Top2-1; j++)
- {
- int x1 = a[i].sta;
- int y1 = a[i].end;
- int x2 = b[j].sta;
- int y2 = b[j].end;
- int k1 = 0;
- if(x1>0&&x2>0)
- {
- k1 = num1[x1-1][x2-1];
- }
- int k2 = 0;
- if(y1<l1-1&&y2<l2-1)
- {
- k2 = num2[l1-2-y1][l2-2-y2];
- }
- Max = max(Max,res+k2+k1);
- }
- }
- printf("Case #%d: %d\n",tem++,Max);
- }
- return 0;
- }
- void get(int (*p)[N],string ch1,string ch2)
- {
- int l1 = ch1.size();
- int l2 = ch2.size();
- memset(p,0,sizeof(p));
- for(int i=0; i<=l1-1; i++)
- {
- for(int j=0; j<=l2-1; j++)
- {
- if(i==0&&j==0)
- {
- if(ch1[i]==ch2[j])
- {
- p[i][j] = 1;
- }
- }
- else if(i==0&&j!=0)
- {
- if(ch1[i]==ch2[j])
- {
- p[i][j] = 1;
- }
- else
- {
- p[i][j] = p[i][j-1];
- }
- }
- else if(i!=0&&j==0)
- {
- if(ch1[i]==ch2[j])
- {
- p[i][j] = 1;
- }
- else
- {
- p[i][j] = p[i-1][j];
- }
- }
- else
- {
- if(ch1[i]==ch2[j])
- {
- p[i][j] = p[i-1][j-1]+1;
- }
- else
- {
- p[i][j] = max(p[i][j-1],p[i-1][j]);
- }
- }
- }
- }
- }
HDU 4679 String的更多相关文章
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
- Terrorist’s destroy HDU - 4679
Terrorist’s destroy HDU - 4679 There is a city which is built like a tree.A terrorist wants to destr ...
- HDU 3374 String Problem(KMP+最大/最小表示)
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4679 Terrorist’s destroy 树形DP
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4679 题意:给定一颗树,每条边有一个权值w,问切掉哪条边之后,分成的两颗树的较大的直径*切掉边的权值最小? ...
- hdu 5772 String problem 最大权闭合子图
String problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5772 Description This is a simple pro ...
- HDU 4821 String(2013长春现场赛I题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4821 字符串题. 现场使用字符串HASH乱搞的. 枚举开头! #include <stdio.h ...
- HDU 2476 String painter(区间DP+思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意:给你字符串A.B,每次操作可以将一段区间刷成任意字符,问最少需要几次操作可以使得字符串 ...
- 2017多校第6场 HDU 6096 String AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6096 题意:给了一些模式串,然后再给出一些文本串的不想交的前后缀,问文本串在模式串的出现次数. 解法: ...
- HDU 6194 string string string(后缀数组+RMQ)
string string string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
随机推荐
- JAVA FILE or I/O学习 - Desktop本地程序学习
public class DesktopKnow { public void know() { try { Desktop.getDesktop().open(new File("C:\\P ...
- Objective-c 协议(protocol)
协议的作用类似地C++中对抽象基类的多重继承.类似于Java中的接口(interface)的概念. 协议是多个类共享方法的列表,协议中列出的方法在本类中并没有相应实现,而是别的类来实现这些方法. ...
- OpenStack_Swift源代码分析——Object-auditor源代码分析(1)
1 Object-auditor 的启动 Object-auditor的启动和object-replicator的启动过程是一样的,首先是运行启动脚本 swift-init object-audito ...
- 没有login页面
"/"应用程序中的服务器错误. 无法找到资源. 说明:HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保 ...
- 读取jar包里面的文件
一.最近做项目的时候,师兄要求读取jar包里面的java文件.在网上查了各种文件以后,终于完成了,在这里和各位朋友分享一下. (一)找到jar包所在的位置. String path="XXX ...
- php随笔9-thinkphp OA系统 集成UEditor
版本信息:thinkphp 3.1.3 full UEditor 1.4.3.1 utf8-php 1.将EUditor放在项目public目录下. 2.在指定页面加载编辑器 <!-- ...
- 2013 南京邀请赛 A play the dice 求概率
/** 大意:给定一个色子,有n个面,每一个面上有一个数字,在其中的m个面上有特殊的颜色,当掷出的色子出现这m个颜色之一时,可以再掷一次..求其最后的期望 思路:假设 期望为ans 4 ans = 1 ...
- 迪杰斯特拉算法c语言实现
/*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法 P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2 ...
- 【转】C++常见错误大全
原文转自:http://hi.baidu.com/qiou2719/item/b9eed949130ff50ec0161331 C++常见错误大全 0. XXXX "is not a cla ...
- 转:你真的懂得JS吗?
题目1 if (!("a" in window)) { var a = 1; } alert(a); // undefined, ~~~所有全局变量都是window的属性,声明语句 ...