sicily 1010 Zipper

继续骚一把,之前已经AC了,但是没有用上DP,现在用上了

与上一篇一样,用了滚动数组

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int roll[ 210 ];
int main()
{
	string a, b, c, t;
	int mark, mark2, i, m, n;
	cin >> mark;
	mark2 = 0;
	while( mark2 < mark )
	{
		cin >> a >> b >> c;
		if( a[ 0 ] != c[ 0 ] )
		{
			t = b;
			b = a;
			a = t;
		}
		memset( roll, 0, a.length() * sizeof( int ) );
		roll[ 0 ] = 1;
		for( i = 1; i < a.length(); i++ )
		{
			if( a[ i ] == c[ i ] )
				roll[ i ] = 1;
			else
				break;
		}
		for( m = 0; m < b.length(); m++ )
		{
			for( n = 0; n < a.length(); n++ )
			{
				if( n > 0 )
				{
					if( ( roll[ n ] == 1 && b[ m ] == c[ m + n + 1 ] ) || ( roll[ n - 1 ] == 1 && a[ n ] == c[ m + n + 1 ] ) )
						roll[ n ] = 1;
					else
						roll[ n ] = 0;
				}
				else
					if( roll[ n ] == 1 && b[ m ] == c[ m + n + 1 ] )
						roll[ n ] = 1;
			}
		}
		mark2++;
		cout << "Data set " << mark2 << ": ";
		if( roll[ a.length() - 1 ] )
			cout << "yes" << endl;
		else
			cout << "no" << endl;
	}
	return 0;
}


sorry,没写注释,不明白的可以留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值