您的位置:首页 > 其它

A Love Letter

2014-03-17 20:40 169 查看


题目描述

  CodeMonkey终于下定决心用情书的方式向心爱的女神表白,当他历经几天几夜写完之后才知道女神有很多不喜欢的词,所以他不得不有把这些词删掉。例如:原文是:ILOVEYOU,女神不喜欢的词是‘LV’,‘O’那么最终情书要改成IEYU。现在已知女生不喜欢的词的集合S,CodeMonkey想知道刚写的情书会改成什么样?S={“HATE”,“SHIT”,“LV”,“O”,“FUCK”,“UGLY”,“MM”}


输入

  多样例输入,每个样例输入一行情书原文,原文只包含大写英文字母,原文长度不超过1000


输出

  对于每个样例,若是情书被删完则输出一行“LOSER”,否则输出情书的剩余内容


样例输入

ILOVEYOU
MM


样例输出

IEYU
LOSER


题解:先把固定的删掉的单词按字母数从小到大排序。依次删除,同数字母删除直到没有删除为止。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char s[10][10][10]={{"O"},{"LV","MM"},{"HATE","SHIT","FUCK","UGLY"}};
/*char s[1]={"O"};
char s[2]={"LV","MM"};
char s[3]={"HATE","SHIT","FUCK","UGLY"};*/
char ss[1010];
int main()
{
	while (~scanf("%s",&ss))
	{
		int i,j;
		char *k;
		int l=strlen(ss);
		while (k=strstr(ss,s[0][0]))
		{
			int ll=strlen(k);
			for (i=1,j=0;i<ll;i++,j++)
				ss[l-ll+j]=k[i];
			ss[l-1]='\0';
			l=l-1;
		}
		int f=1;
		while (f)
		{
			f=0;
		for (i=0;i<=1;i++)
			while (k=strstr(ss,s[1][i]))
			{
				f=1;
				int j1,ll=strlen(k);
				for (j=2,j1=0;j<ll;j++,j1++)
					ss[l-ll+j1]=k[j];
				ss[l-2]='\0';
				l=l-2;
			}
			
		}
		f=1;
		while (f)
		{
			f=0;
			for (i=0;i<=3;i++)
			while (k=strstr(ss,s[2][i]))
			{
				f=1;
				int j1,ll=strlen(k);
				for (j=4,j1=0;j<ll;j++,j1++)
					ss[l-ll+j1]=k[j];
				ss[l-4]='\0';
				l=l-4;
			}
		}
		if (strlen(ss)==0) printf("LOSER\n");
		else printf("%s\n",ss);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: