#S1008. Sanhai 的 AI检查

Sanhai 的 AI检查

题目背景

SanhaiOJ 最近上线了“AI 辅助写代码”功能,但很快就遇到一个新问题:
有些用户提交的代码是自己写的,有些则是 AI 自动生成的。为了公平起见,OJ 需要一个检测模块,来判断一份代码是否“疑似 AI 生成”。

经过研究,Sanhai 发现 AI 生成的代码往往有一些特征:

  • 变量名重复率较高
  • 代码风格过于统一
  • 出现一些“模板化”的片段

于是,他决定用一个简化的模型来检测:如果一份代码中,某些模式出现得过于频繁,就判定它是 AI 生成的。


题目描述

给定一段代码(用字符串表示),以及一个整数 kk
我们定义“模式”为代码中的任意长度为 kk 的子串。
如果存在某个模式在代码中出现次数 ≥ 2,则认为该代码“疑似 AI 生成”。
否则,认为该代码是“人工编写”。

请你实现这个检测器。


输入格式

  • 第一行两个整数 n,kn, k
    • nn:代码的长度 1n2×1051 ≤ n ≤ 2×10^5
    • kk:模式长度1kn1 ≤ k ≤ n
  • 第二行一个长度为 nn 的字符串,表示代码内容(仅包含小写字母和数字)。

输出格式

  • 如果存在某个长度为 kk 的子串出现次数 ≥ 2,输出:
    AI
    
  • 否则输出:
    Human
    

数据范围与提示

  • 1n2×1051 ≤ n ≤ 2×10^5
  • 1kn1 ≤ k ≤ n
  • 建议使用 哈希(Rolling Hash)后缀数组/后缀自动机 来高效判断是否存在重复子串。

样例一

输入:

10 3
abcabcxxyz

输出:

AI

解释:
长度为 3 的子串 "abc" 出现了两次,因此判定为 AI。


样例二

输入:

8 4
abcdefgh

输出:

Human

解释:
所有长度为 4 的子串都只出现一次,因此判定为人工编写。