#S1008. Sanhai 的 AI检查
Sanhai 的 AI检查
题目背景
SanhaiOJ 最近上线了“AI 辅助写代码”功能,但很快就遇到一个新问题:
有些用户提交的代码是自己写的,有些则是 AI 自动生成的。为了公平起见,OJ 需要一个检测模块,来判断一份代码是否“疑似 AI 生成”。
经过研究,Sanhai 发现 AI 生成的代码往往有一些特征:
- 变量名重复率较高
- 代码风格过于统一
- 出现一些“模板化”的片段
于是,他决定用一个简化的模型来检测:如果一份代码中,某些模式出现得过于频繁,就判定它是 AI 生成的。
题目描述
给定一段代码(用字符串表示),以及一个整数 。
我们定义“模式”为代码中的任意长度为 的子串。
如果存在某个模式在代码中出现次数 ≥ 2,则认为该代码“疑似 AI 生成”。
否则,认为该代码是“人工编写”。
请你实现这个检测器。
输入格式
- 第一行两个整数
- :代码的长度
- :模式长度
- 第二行一个长度为 的字符串,表示代码内容(仅包含小写字母和数字)。
输出格式
- 如果存在某个长度为 的子串出现次数 ≥ 2,输出:
AI - 否则输出:
Human
数据范围与提示
- 建议使用 哈希(Rolling Hash) 或 后缀数组/后缀自动机 来高效判断是否存在重复子串。
样例一
输入:
10 3
abcabcxxyz
输出:
AI
解释:
长度为 3 的子串 "abc" 出现了两次,因此判定为 AI。
样例二
输入:
8 4
abcdefgh
输出:
Human
解释:
所有长度为 4 的子串都只出现一次,因此判定为人工编写。
相关
在下列比赛中: