L1-101 别再来这么多猫娘了!

2024团体设计天梯赛之L1-101 别再来这么多猫娘了 首先我们来看一下这道题的题目内容:这就是这个题的题目,在满足违禁词不超过阈值的情况下,将违禁词全部替换成,但这种情况下我们需要考虑,如过这个是违禁词怎么办,我们如果在找的过程中就替换的话会出现重复替换的情况,这样会造成超时或者其他的一些影响,所以这里我们应该用一些特殊的符号先来代替这个违禁词,后续再将违禁词更换为。再一种情况就是如果大于等于违禁词,就要输出个数与那句话,所以同时我们还要记录着违禁词的个数。 阅读详情

L1-101 别再来这么多猫娘了!

完整原题

以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!

言归正传,对于 GPT 类的 AI,一个使用方式受到不少年轻用户的欢迎——将 AI 变成猫娘。

当然,由于训练数据里并不区分道德或伦理倾向,因此如果不加审查,AI 会生成大量的、不一定符合社会公序良俗的内容。尽管关于这个问题仍有争论,但至少在比赛中,我们还是期望 AI 能用于对人类更有帮助的方向上,少来一点猫娘。

因此你的工作是实现一个审查内容的代码,用于对 AI 生成的内容的初步审定。更具体地说,你会得到一段由大小写字母、数字、空格及 ASCII 码范围内的标点符号的文字,以及若干个违禁词以及警告阈值,你需要首先检查内容里有多少违禁词,如果少于阈值个,则简单地将违禁词替换为<censored>;如果大于等于阈值个,则直接输出一段警告并输出有几个违禁词。

输入格式:
输入第一行是一个正整数 N (1≤N≤100),表示违禁词的数量。接下来的 N 行,每行一个长度不超过 10 的、只包含大小写字母、数字及 ASCII 码范围内的标点符号的单词,表示应当屏蔽的违禁词。
然后的一行是一个非负整数 k (0≤k≤100),表示违禁词的阈值。
最后是一行不超过 5000 个字符的字符串,表示需要检查的文字。
从左到右处理文本,违禁词则按照输入顺序依次处理;对于有重叠的情况,无论计数还是替换,查找完成后从违禁词末尾继续处理。

输出格式:
如果违禁词数量小于阈值,则输出替换后的文本;否则先输出一行一个数字,表示违禁词的数量,然后输出He Xie Ni Quan Jia!。

输入样例1:

5
MaoNiang
SeQing
BaoLi
WeiGui
BuHeShi
4
BianCheng MaoNiang ba! WeiGui De Hua Ye Keyi Shuo! BuYao BaoLi NeiRong.

输出样例1:

BianCheng <censored> ba! <censored> De Hua Ye Keyi Shuo! BuYao <censored> NeiRong.

输入样例2:

5
MaoNiang
SeQing
BaoLi
WeiGui
BuHeShi
3
BianCheng MaoNiang ba! WeiGui De Hua Ye Keyi Shuo! BuYao BaoLi NeiRong.

输出样例2:

3
He Xie Ni Quan Jia!

输入样例3:

2
AA
BB
3
AAABBB

输出样例3:

<censored>A<censored>B

代码

#include <algorithm>   // 字符串操作函数库(find/erase/insert 可用)
#include <iostream>    // 输入输出流(cin / cout 必须用)
#include<bits/stdc++.h> // C++ 万能头文件(包含所有常用库,比赛专用)
using namespace std;
int n;
string arr[200];
string str;
int cnt=0;
int k;
string s="<censored>";
/*
避免替代的字符串中再有违禁词
*/
int main() {
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	cin>>k;
	getchar();//读取空行
	getline(cin,str);
	
	for(int i=0;i<n;i++){
		while(1){
			if(str.find(arr[i])!=-1){//看能不能找到
				cnt++;
			    int pos=str.find(arr[i]);
				str.erase(pos,arr[i].size());//找到就删除
				str.insert(pos,"*_*");//先用一个不含字符数字的标识符代替
			}
			else break;
		}
	}

	if(cnt<k){//如果违禁词小于阈值
		while(str.find("*_*")!=-1){
			int poss=str.find("*_*");
			str.erase(poss,3);
			str.insert(poss,s);
		}
		cout<<str;
	}
	else {//如果违禁词大于等于阈值
		cout<<cnt<<endl;
		cout<<"He Xie Ni Quan Jia!";
	}
	return 0;
}
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int n;
int k;//表示违禁词的阈值。
string s="<censored>";
string str;//表示需要检查的文字
string arr[105];//,表示应当屏蔽的违禁词
int cnt =0;//目前的违禁词
int main (){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    cin>>k;
    getchar();//读取空行
    getline(cin,str);

    for(int i=0;i<n;i++){
        size_t pos;
        //size_t 是 无符号整数(专门给字符串、数组用),str.find() 返回的就是 size_t 类型
			//它在#include <string>或者#include <bits/stdc++.h>
        while((pos=str.find(arr[i]))!=string::npos){
            cnt++;
            str.replace(pos,arr[i].size(),"*_*");
        }
    }
    if(cnt>=k){
        cout<<cnt<<endl;
        cout<<"He Xie Ni Quan Jia!";
    }else{
        size_t pos;
        while((pos=str.find("*_*"))!=string::npos){
            cnt++;
            str.replace(pos,3, s);
        }
        cout<<str;
    }
}

代码中核心函数详解

1. cin >> 变量

  • 作用:从标准输入读取数据,自动跳过空白字符(空格、换行、制表符)。
  • 使用场景:读取整数 n、k,以及不含空格的违禁词 arr[i]。
  • 注意:读取后会在输入缓冲区留下换行符,需配合 getchar() 处理。

2. getchar()

  • 作用:从输入缓冲区读取一个字符(通常用于“吃掉”多余的换行符)。

  • 使用场景:在 cin >> k 后调用,避免 getline() 读到空行。

  • 原理:cin >> k 读完数字后,换行符仍在缓冲区,getchar() 会将其读取并丢弃。

  • 只有一种情况需要 getchar()
    ✅ 当你接下来要读 字符 / 字符串 时!
    ❌ 读数字(int、float)绝对不需要!

  • cin >> 数字
    会自动跳过:

  • 空格

  • 换行

  • 回车

所以读数字时:

cin >> index >> num;

换行符自动忽略,根本不用处理!

  • cin >> 字符 / getline()
    不会跳过换行符!
    换行符 \n 会被当成一个字符读走!
    导致你读不到真正想要的字符!

3. getline(cin, str)

  • 作用:读取一整行字符串(包含空格和标点),直到遇到换行符为止。
  • 使用场景:读取带空格的待检查文本 str。
  • 注意:必须先处理 cin 留下的换行符,否则会读到空字符串。

4. str.find(子串)

  • 作用:在字符串 str 中查找子串第一次出现的位置。

  • 返回值:找到则返回起始下标(int),未找到则返回 string::npos(可写为 -1)。

  • 使用场景:判断是否存在违禁词 arr[i],并获取其位置。

  • 示例:str.find("AA") 在 "AAABBB" 中返回 0。

  • 写 string::npos
    :: 叫 作用域符号
    作用:告诉编译器,这个 npos 属于 string 类
    就像 姓名::姓氏
    意思:这是字符串里专用的 “没找到” 标记

    :: = 属于、专用
    npos = no position = 没找到位置
    string::npos = 字符串里表示“找不到”的固定值
    = 代表“没找到”

5. str.erase(起始位置, 长度)

  • 作用:从字符串中删除指定位置开始、指定长度的字符。
  • 使用场景:删除找到的违禁词,为替换占位符做准备。
  • 示例:str.erase(0, 2) 会删除从位置 0 开始的 2 个字符。

6. str.insert(位置, 插入内容)

  • 作用:在字符串的指定位置插入新的字符串。
  • 使用场景:
    1. 第一轮:插入占位符 *_* 替换违禁词。
    2. 第二轮:插入 <censored> 替换占位符 *_*。
  • 示例:str.insert(0, "*_*") 在位置 0 插入占位符。

7. str.size()

  • 作用:返回字符串的字符长度。
  • 使用场景:获取违禁词 arr[i] 的长度,用于 erase() 操作。
  • 示例:"AA".size() 返回 2。

8. cout << 内容

  • 作用:向标准输出打印内容。
  • 使用场景:输出替换后的文本,或违禁词数量与警告语。
  • 注意:输出文本时需保留原格式(空格、标点),警告语后需换行。

9. str.replace(pos, arr[i].size(), "*_*");

  • 作用:替换字符串里的一段文字!**
  • 三个参数分别是:
str.replace(从哪里开始, 替换多长, 换成什么);

在这里插入图片描述


函数作用核心使用场景
cin >>读取无空格数据读整数、违禁词
getchar()读取单个字符吃掉缓冲区换行符
getline()读取整行文本读带空格的待检查文本
str.find()查找子串位置查找违禁词
str.erase()删除指定字符删除违禁词
str.insert()插入字符串替换为占位符/屏蔽词
str.size()获取字符串长度计算违禁词长度
cout <<输出内容输出结果

PTA L1-101 猫娘审查[项目代码] 本文介绍了PTA L1-101题目,要求实现一个审查AI生成内容的代码。题目背景涉及GPT技术的广泛应用,尤其是年轻用户喜欢将AI变成猫娘的现象。由于AI可能生成不符合社会公序良俗的内容,题目要求对输入文本进行违禁词审查。具体实现包括存储违禁词、替换违禁词为特殊字符、统计违禁词数量并根据阈值输出结果。代码部分展示了如何用C++实现这一功能,包括输入处理、违禁词查找与替换、以及最终输出逻辑。 立即下载

相关推荐

寻迹Arduino智能小车

Arduino巡线寻迹智能小车

Rachael_Wang的博客 1万+

2024 CCCC—天梯赛 别再来这么多猫娘了!

这道题有点ex... 如果平时对string容器中的几个函数不是很了解,很有可能被卡住(555......我就是这样的)L1-101 别再来这么多猫娘了!以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!

2301_79363050的博客 3554

(一)企业微信 - 会话内容存档

企业微信获取会话记录。

专打丶小豆豆的博客 2893

2024 团体程序设计天梯赛 L1-101 猫娘

2024 团体程序设计天梯赛 L1-101 猫娘,该题主要考查字符串处理的能力

still_fancy的博客 1455

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1125

交叉编译Qt6.5.3(RK3568开发板)

注意,如果使用其它版本的交叉编译器的话,请确保你的交叉编译器能够支持 C++17标准。为确保后续交叉编译没问题,需要确保开发板使用的GLIBC版本不小于2.34版本。到 linaro 网站上下载交叉编译工具,我下载的是 gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu.tar.xz。安装 CMake ,最低要求3.16版本,如果要静态编译,需要3.21及以上版本。我使用的3.27版本。:指定为最后交叉编译后的Qt6.5.3库的安装目录。

m0_46309425的博客 5104

L1-101 别再来这么多猫娘了!(2024PTA天梯赛)

PTA的通过率惨不忍睹,这题确实是L1里最让人想不到的题了,涉及的string字符串的处理比较考验基本功需要多练。

u012137663的博客 6767

【Java微服务-医疗管理项目】(附源码+资料+教程)

尚医疗是专门为各大医院、门诊提供的一款医疗管理平台。 系统包含:系统管理、药品进销存管理、看病就诊、收费管理、检查管理、数据统计等核心模块。 通过尚医疗系统可以快速、方便的管理病人从挂号到门诊结束所涉及到的全套流程。也可以清晰明了的体现出药品进货、出售的所有记录。.........

m0_72882572的博客 2203

L1-101 别再来这么多猫娘了! - java

因此你的工作是实现一个审查内容的代码,用于对 AI 生成的内容的初步审定。更具体地说,你会得到一段由大小写字母、数字、空格及 ASCII 码范围内的标点符号的文字,以及若干个违禁词以及警告阈值,你需要首先检查内容里有多少违禁词,如果少于阈值个,则简单地将违禁词替换为。接下来的 N 行,每行一个长度不超过 10 的、只包含大小写字母、数字及 ASCII 码范围内的标点符号的单词,表示应当屏蔽的违禁词。如果出现违禁词的数量大于等于阈值: 则输出出现违禁词的数量,以及。如果有说错的 或者 不懂的 尽管提 嘻嘻。

谢谢 啊sir的博客 1039

Cadence Virtuoso VIVA波形分析:从背景色修改到线宽调整的完整指南

本文详细介绍了Cadence Virtuoso VIVA波形分析工具的核心使用技巧,包括背景色修改、线宽调整等高级功能。通过具体操作步骤和配置方法,帮助工程师优化波形显示效果,提升工作效率。特别强调了与Calculator组件的配合使用,以及专业波形图的输出技巧。

weixin_27330481的博客 621

通过Robotstudio修改机器人程序的具体方法和步骤

通过Robotstudio修改机器人程序的具体方法和步骤

Robot_PLC_HMI_Automation 6393

L1-101 别再来这么多猫娘了!(C++)

L1-101 别再来这么多猫娘了!以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!言归正传,对于 GPT 类的 AI,一个使用方式受到不少年轻用户的欢迎——将 AI 变成猫娘:部分公司使用 AI 进行网络营销,网友同样乐于使用“变猫娘”的方式进行反击。

2301_80278321的博客 1875

Qt入门教程【数据类型篇】数值类型

Qt中的数值类型

小鱼酱的博客 1万+

PTA 天梯赛 L1-101 别再来这么多猫娘了!

因此你的工作是实现一个审查内容的代码,用于对 AI 生成的内容的初步审定。更具体地说,你会得到一段由大小写字母、数字、空格及 ASCII 码范围内的标点符号的文字,以及若干个违禁词以及警告阈值,你需要首先检查内容里有多少违禁词,如果少于阈值个,则简单地将违禁词替换为。当然,由于训练数据里并不区分道德或伦理倾向,因此如果不加审查,AI 会生成大量的、不一定符合社会公序良俗的内容。行,每行一个长度不超过 10 的、只包含大小写字母、数字及 ASCII 码范围内的标点符号的单词,表示应当屏蔽的违禁词。

00后的博客 1130

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

团体程序设计天梯赛-练习集 L1-098 再进去几个人 L1-099 帮助色盲 L1-100 四项全能 L1-101 别再来这么多猫娘了!

5分加减法题。

2501_91263296的博客 682

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PAT 天梯赛 L1-101 别再来这么多猫娘了!

以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!言归正传,对于 GPT 类的 AI,一个使用方式受到不少年轻用户的欢迎——将 AI 变成猫娘:部分公司使用 AI 进行网络营销,网友同样乐于使用“变猫娘”的方式进行反击。注意:图中内容与题目无关,如无法看到图片不影响解题。

2401_87934559的博客 797

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++:L1-101 别再来这么多猫娘了!

以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!言归正传,对于 GPT 类的 AI,一个使用方式受到不少年轻用户的欢迎——将 AI 变成猫娘:部分公司使用 AI 进行网络营销,网友同样乐于使用“变猫娘”的方式进行反击。注意:图中内容与题目无关,如无法看到图片不影响解题。

crescent_yue的博客 934

PTA L1-101 别再来这么多猫娘了!(C++ 含代码解释)

以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!言归正传,对于 GPT 类的 AI,一个使用方式受到不少年轻用户的欢迎——将 AI 变成猫娘:部分公司使用 AI 进行网络营销,网友同样乐于使用“变猫娘”的方式进行反击。注意:图中内容与题目无关,如无法看到图片不影响解题。

ZQR1120的博客 611
上一篇: L1-086 斯德哥尔摩火车上的题、L1-087机工士姆斯塔迪奥
下一篇: C++ vector 超全用法整理
ab123768
博客等级 码龄3年 43粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ab123768

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值