题目大意:
给你一个目标串,还有一个给定的序列,不过给定的序列有两串相同长度的,是对立的,相应位置可以翻过来(‘*’可以代表任意一个字符),然后要目标串从左往右依次(依次很重要)可以再给定序列中找到。
解题思路:
从给定串中从左往右扫描就行了。只需两个循环。
吐吐槽:
一开始没有理解好题意,没有看到依次两个字,然后就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;
}