Zipper
|
|
ZipperTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description
Given three strings, you are to determine whether the third string can be formed by combining the characters in the first two strings. The first two strings can be mixed arbitrarily, but each must stay in its original order.
For example, consider forming "tcraete" from "cat" and "tree": String A: cat As you can see, we can form the third string by alternating characters from the two strings. As a second example, consider forming "catrtee" from "cat" and "tree": String A: cat Finally, notice that it is impossible to form "cttaree" from "cat" and "tree". Input
The first line of input contains a single positive integer from 1 through 1000. It represents the number of data sets to follow. The processing for each data set is identical. The data sets appear on the following lines, one data set per line.
For each data set, the line of input consists of three strings, separated by a single space. All strings are composed of upper and lower case letters only. The length of the third string is always the sum of the lengths of the first two strings. The first two strings will have lengths between 1 and 200 characters, inclusive. Output
For each data set, print:
Data set n: yes if the third string can be formed from the first two, or Data set n: no if it cannot. Of course n should be replaced by the data set number. See the sample output below for an example. Sample Input
3 cat tree tcraete cat tree catrtee cat tree cttaree
Sample Output
Data set 1: yes Data set 2: yes Data set 3: no
|
注意一定要判最后一个字母可以匹配,要不超时。。。
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int n;
bool ans;
int len1, len2, len3;
char s1[], s2[], s3[];
void get(int &x){
scanf("%d", &x);
}
void get(char *s){
scanf("%s", s);
}
void work(int i, int j, int k);
int main(){ int kase = ;
get(n);
while(n-- > ){
get(s1);
get(s2);
get(s3);
ans = false; len1 = strlen(s1);
len2 = strlen(s2);
len3 = strlen(s3);
if(len1 + len2 == len3 && (s1[len1-]==s3[len3-]||s2[len2-]==s3[len3-])){
work(, , );
}
if(ans){ printf("Data set %d: yes\n", kase++);
}else{
printf("Data set %d: no\n", kase++);
}
}
return ;
} void work(int i, int j, int k) { if(ans)
return;
if(k >= len3){
ans = true;
return;
} if(i < len1 && s1[i] == s3[k]){
work(i + , j, k + );
}
if(j < len2 && s2[j] == s3[k]){
work(i, j + , k + );
}
}
java:
package com.hbc.week3;
import java.util.Scanner;
public class Zipper {
private static int n;
private static Scanner cin = new Scanner(System.in);
private static boolean ans;
public static void main(String[] args) {
String s1, s2, s3;
int kase = 1;
n = cin.nextInt();
while(n-- > 0){
s1 = cin.next();
s2 = cin.next();
s3 = cin.next();
ans = false;
if(s1.length() + s2.length() == s3.length() && (s1.charAt(s1.length() - 1)==s3.charAt(s3.length() - 1)
||s2.charAt(s2.length() - 1) == s3.charAt(s3.length() - 1))){
work(s1, s2, s3, 0, 0, 0);
}
if(ans){
System.out.println("Data set " + (kase++) + ": yes");
}else{
System.out.println("Data set " + (kase++) + ": no");
}
}
}
private static void work(String s1, String s2, String s3, int i, int j, int k) {
if(k >= s3.length()){
ans = true;
return;
}
if(i < s1.length() && s1.charAt(i) == s3.charAt(k)){
work(s1, s2, s3, i + 1, j, k + 1);
}
if(j < s2.length() && s2.charAt(j) == s3.charAt(k)){
work(s1, s2, s3, i, j + 1, k + 1);
}
}
}
Zipper的更多相关文章
- POJ 2192 :Zipper(DP)
http://poj.org/problem?id=2192 Zipper Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1 ...
- HDU 1501 Zipper 动态规划经典
Zipper Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU 1501 Zipper(DP,DFS)
意甲冠军 是否可以由串来推断a,b字符不改变其相对为了获取字符串的组合c 本题有两种解法 DP或者DFS 考虑DP 令d[i][j]表示是否能有a的前i个字符和b的前j个字符组合得到c的前i+j ...
- hdu1501 Zipper
Zipper Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- Zipper(poj2192)dfs+剪枝
Zipper Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15277 Accepted: 5393 Descripti ...
- Haskell语言学习笔记(36)Data.List.Zipper
ListZipper 模块 $ cabal install ListZipper Installed ListZipper-1.2.0.2 Prelude> :m +Data.List.Zipp ...
- HDU1501 Zipper(DFS) 2016-07-24 15:04 65人阅读 评论(0) 收藏
Zipper Problem Description Given three strings, you are to determine whether the third string can be ...
- soj1010. Zipper
1010. Zipper Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Given three strings, yo ...
- HDU 1501 Zipper 【DFS+剪枝】
HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...
随机推荐
- hdu 3874 Necklace(bit树+事先对查询区间右端点排序)
Mery has a beautiful necklace. The necklace is made up of N magic balls. Each ball has a beautiful v ...
- 关于#ifndef,#define,#end的说明
#ifndef,#define,#end 是宏定义的一种---条件编译 这样我直接举个例子好了:我定义两个相同的类A分别在single.h和singlenew.h single.h: #include ...
- nginx编译配置
1, 正向代理是一个位于内网客户端和外网原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后由代理服务器向 原始服务器转交请求并将获得的内容返回给客户端.正向代理 ...
- java.lang.UnsatisfiedLinkError: no XXX in java.library.path
其中涉及的测试源码如下: For those who didn't install Javawith default settings, a systematic way for solving JN ...
- Java程序员面试题集(136-150)(转)
转:http://blog.csdn.net/jackfrued/article/details/17740651 Java程序员面试题集(136-150) 摘要:这一部分主要是数据结构和算法相关的面 ...
- java排列
排列:它可以被看作是多个相同类型的数据的组合,这些数据的统一管理. 1.声明. 创建 一维:type[] var 比如:int[] a或 int a[]: 数组名= new 数组元素的类型[数组 ...
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
题意 给你个字符串,问在字符串末尾还要添加几个字符,使得字符串循环2次以上. 解法 无论这个串是不是循环串 i-next[i] 都能求出它的最小循环节 代码: /* 思路:kmp+字符串的最小循环节问 ...
- ios9基础知识总结(一)
I--load 类被加载时自动调用,只要类的项目中,运行时就会加载.类一加载,此方法就会调用 //类被加载时调用,只要类的项目中,运行时就会加载,类一加载,此方法就调用 + (void)load { ...
- 时间的获取和转换,C#和Sql
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- JS 一个修改ul的小示例
javascript提供了innerHTML属性可以获取和设置对象的文本内容. 下面实例演示——单击<ul>下的<li>标签后,改变其显示值: 1.HTML结构 <ul ...