HDU1683_寒假第二场1002

题目大意: 给你一个目标串,还有一个给定的序列,不过给定的序列有两串相同长度的,是对立的,相应位置可以翻过来(‘*’可以代表任意一个字符),然后要目标串从左往右依次(依次很重要)可以再给定序列中找到。 解题思路: 从给定串中从左往右扫描就行了。只需两个循环。 吐吐槽: 一开始没有理解好题意,没有看到依次两个字,然后就yy,写了100多行的代码,好吧,最后再调试样例那里才看到原来是有依次顺序的。不过有依次顺序反而更好做呢,这次十分钟就写完了,就因为思路清晰。做完这个题,才意识到昨天的比赛自己有多笨。要有善于发现基础题的眼睛啊。一开始就畏惧,真不是好事。 代码:
#include
#include
using namespace std;
const int MAX = 105;
char aim[MAX], up[MAX], down[MAX];
int lenAim;
int len;

int main(void)
{
	int cas;
	scanf("%d", &cas);
	while(cas--)
	{
		scanf("%s", aim);
		scanf("%s", up);
		scanf("%s", down);

		len = strlen(up);
		lenAim = strlen(aim);
		
		bool Flag = true;
		int h = 0;
		int j;
		for(int i = 0; i < lenAim; i++)
		{
			for(j = h; j < len; j++)
			{
				if(aim[i] == up[j] || aim[i] == down[j] || up[j] == '*')
				{
					h = j + 1;
					break;
				}
			}
			if(j == len)
			{
				Flag = false;
			}
		}

		if(Flag)
			printf("win\n");
		else
			printf("lose\n");
	}
	return 0;
}
原文地址:https://www.cnblogs.com/cchun/p/2520217.html