总时间限制:
1000ms
内存限制:
65536kB
描述
Y同学最近状态十分低落,因为期末来临,DDL压身,以致神思不属、茶饭不思,沉迷手机、无心学习。然而在水手机的时候,Y同学却发现,身边用功的同学好多,自己的时间线上满满的都是学霸们的动态。
“WA了好久终于AC啦!”
“忙完一个DDL终于又可以忙下一个……”
再看着自己一事无成的期末,Y同学觉得自己身上的罪恶感一点点地增大。
突然,Y同学灵机一动:“如果我的罪恶感到了一定程度,那么我就可以战胜自己的怠惰,与学习喜结连理了!”
于是,你身为Y同学的挚友,受Y同学之托要写一个小程序,通过标注出那些能刺激Y同学的词语,来帮助Y同学积累罪恶感。
首先,Y同学会给你一个词汇表,里面是能刺激到Y同学的词语,一共n个,每个词语都是区分大小写的英文单词,中间没有空格。
从Y同学的词汇表中,任取两个词语A、B,都能保证A不会是B的子串。
然后,你会得到Y同学的时间线上大家的动态,一共m条,每条都是一行句子,包括英文字母、标点符号和若干空格。
你的任务就是:根据词汇表的顺序,对于每个词语依次从前往后把句子中出现的该词语替换为等量的星号(’*’)。这样Y同学看到星号就知道自己的罪恶感该提升了。被替换的词语前后不一定有空格。
但是要注意,句子里其他的部分要保持原样,只有刺激性词语需要替换成星号。
已经替换成星号的部分无法再被替换。
输入
第一行是两个数字n(1 <= n <= 20)和m(1 <= m <= 20),中间用空格分隔。
接下来n行,每行一个英文单词,组成能刺激到Y同学的词汇表。单词区分大小写,长度最大为20。
再接下来m行,每行一个英文句子,句子里可能有英文字母、标点符号和若干空格,长度最大为100。
输出
你需要输出m行,每行是替换过的英文句子。
样例输入
5 3
deadline
jigai
exam
WrongAnswer
TimeLimitExceeded
I finished all my deadlines hhhhhhhh
Wow jigai examination is coming, excited!
what the **** is “WrongAnswer”???
样例输出
I finished all my s hhhhhhhh
Wow ***** ****ination is coming, excited!
what the **** is ""???
提示
如果在词汇表里按顺序有bab、bbb两个词,那么替换bbbabab的结果应该是bbab
#include<bits/stdc++.h>
using namespace std;
// Id returned 1 exit status ,可能是函数名打错了吧,比如main
int main(){
int n,m;
scanf("%d %d\n",&n,&m);
vector<string>word; //单词
string line;
//输入单词
while(n--){
getline(cin,line);
word.push_back(line);
}
//输入句子
vector<string>sen;
while(m--){
getline(cin,line);
sen.push_back(line);
}
for(string&i:sen){
string& temp = i;
for(string&j:word){
int len = j.length();
regex pattern(j);
string s(len,'*');
temp = regex_replace(i,pattern,s);
}
cout<<temp<<endl;
}
return 0;
}