这道题没有AC,感觉有一点点怪,可能是我理解能力有点差吧,总是不太理解题目到底是个什么思路去解决这道题的。就拿原文来讲
从左到右处理文本,违禁词则按照输入顺序依次处理;对于有重叠的情况,无论计数还是替换,查找完成后从违禁词末尾继续处理
这句话我现在还没搞懂什么意思,我试了两种途径,都没有AC,最高的拿到了14分,就是有一分拿不到,我是先遍历违禁词呢,还是先遍历文本呢,两种方法我都试了,还都是不行
思路就是直接模拟,具体细节上可能导致丢分吧,一些样例过不了,这道题样例也比较多,估计出题人也觉得大家不太好理解,多搞几个样例吧~
测试样例1
上下分别 对应输入 输出
5
MaoNiang
SeQing
BaoLi
WeiGui
BuHeShi
4
BianCheng MaoNiang ba! WeiGui De Hua Ye Keyi Shuo! BuYao BaoLi NeiRong.
BianCheng <censored> ba! <censored> De Hua Ye Keyi Shuo! BuYao <censored> NeiRong.
样例2 3 不说了,正常都能过 主要是4 5,很怪,不知道怎么顺序
样例4
2
AB
BB
3
AAABBB
AA<censored><censored>
样例5
2
BB
AB
3
AAABBB
AAA<censored>B
我们来看一下样例4
第一种方式 先遍历文本,然后遍历违禁词
AA AB BB 抓到一个 改成<censored> 接着 AA AB BB 抓到一个 BB 接着改成 <censored>
输出AA<censored><censored> 没问题,是不是就是这种方式 没准,不急我们看看5
还是先遍历文本
AAABBB 不应该抓到AB 改成<censored>吗 不是了 他直接找的BB 我···
很奇怪,写了几种方式都试了试,还是AC不了,大家点点我,没准你们一句话就能解救我于水火之中~~~
代码附上,虽然没有AC 害~
// #include<iostream>
// #include<vector>
// #include<string>
// #include<algorithm>
// using namespace std;
// int main()
// {
// int n;
// cin >> n;
// vector<string> se;
// string str;
// for (int i = 0; i < n; i++)
// {
// cin >> str;
// se.push_back(str);
// }
// int limits, num = 0;
// cin >> limits;
// getchar();
// getline(cin, str);
// for (auto i : se)
// {
// int cnt = str.find(i);
// while (cnt != -1)
// {
// num++;
// cnt = str.find(i, cnt + i.size());
// }
// }
// if (num >= limits)
// {
// cout << num << "\n";
// cout << "He Xie Ni Quan Jia!";
// }
// else
// {
// for (auto i : se)
// {
// int cnt = str.find(i);
// while (cnt != -1)
// {
// str.replace(cnt, i.size(), "<censored>");
// cnt = str.find(i, cnt + 10);
// }
// }
// cout << str;
// }
// return 0;
// }
#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> ve;
string str;
for (int i = 0; i < n; i++)
{
cin >> str;
ve.push_back(str);
}
int limits, num = 0;
cin >> limits;
getchar();
getline(cin, str);
for (int i = 0; i < str.size(); i++)
{
for (auto it : ve)
{
string s = str.substr(i, it.size());
if (s == it)
{
num++;
str.replace(i, it.size(), "<censored>");
i = i + 10 - 1;
break;
}
}
}
if (num >= limits)
{
cout << num << "\n";
cout << "He Xie Ni Quan Jia!";
}
else
cout << str;
//for (auto i : se)
//{
// int cnt = str.find(i);
// while (cnt != -1)
// {
// num++;
// cnt = str.find(i, cnt + i.size());
// }
//}
//if (num >= limits)
//{
// cout << num << "\n";
// cout << "He Xie Ni Quan Jia!";
//}
//else
//{
// for (auto i : se)
// {
// int cnt = str.find(i);
// while (cnt != -1)
// {
// str.replace(cnt, i.size(), "<censored>");
// cnt = str.find(i, cnt + 10);
// }
// }
// cout << str;
//}
return 0;
}
大家不懂多多评论区交流,互相请教互相帮助,没准别人一句话就点通你(亲身经历)
大佬看到,知道我哪里的问题,点点我 我恨困惑1
期待和大家共同加油,希望大家不断进步!