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 ...
随机推荐
- FNN模糊神经网络——信息系统客户服务感知评价
案例描述 信息系统是否真正减轻业务人员的日常工作量提高工作效率?如何从提供“被动”服务转变为根据客户感知提供“主动”服务,真正实现电网企业对信息系统服务的有效管理?如何构建一套适合企业的信息系统客户服 ...
- PKU 1050-To The Max(找矩形内元素最大和)
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...
- Mac 删除Openfire
首先,确保你已经关掉了openfire 打开终端 (在应用程序-->实用工具-->) 输入以下命令 sudo rm -rf /Library/PreferencePanes/Openfir ...
- Hibernate框架(一)——总体介绍
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...
- 使用公用表表达式(CTE)
本文来自:http://blog.csdn.net/songjie521/article/details/3321030 通用表表达式(CTEs)是SQL Server 2005的一项新功能.它们类似 ...
- 【转换模型+扫描线】【UVA1398】Meteor
The famous Korean internet company nhn has provided an internet-based photo service which allows The ...
- ECSHOP首页站内快讯在哪里添加和修改?
“添加新闻后在首页站内快讯处显示不出来?”.“请问首页中站内快讯(最新文章)在后台哪个位置管理”.“如何让发布的文章进入首页站内快讯”等等诸如此类的问题,经常在论坛里看到一些朋友在询问. 本ECSHO ...
- 获取设备的UUID
很多时候需要获取设备的UUID,比如在蓝牙交互时,需要获取服务和特征的UUID,那么如何获取设备的UUID呢?请见如下代码: // // ViewController.m // 获取UUID // / ...
- iOS开发之UIApplication
UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作. iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: ...
- W - stl 的 优先队列 Ⅲ
Description In a speech contest, when a contestant finishes his speech, the judges will then grade h ...