1 条题解

  • 0
    @ 2026-4-26 23:13:56

    题目详细题解

    题目理解

    题目要求判断一个字符串 ss 是否能够被分割成至少 22 个非空子串 t1,t2,,tkt_1, t_2, \dots, t_k,使得对于任意 1i<jk1 \le i < j \le k,都满足 tit_i第一个字符不等于 tjt_j最后一个字符


    关键观察

    设字符串 ss 的第一个字符为 first=s[0]first = s[0],最后一个字符为 last=s[n1]last = s[n-1]

    核心结论:字符串 ss 是“好字符串”当且仅当 s[0]s[n1]s[0] \ne s[n-1]


    充分性证明

    s[0]s[n1]s[0] \ne s[n-1],则 ss 是好字符串。

    构造方法:

    • k=2k = 2
    • t1=s[0]t_1 = s[0] (只取第一个字符)
    • t2=s[1..n1]t_2 = s[1..n-1] (从第二个字符到末尾)

    验证条件:

    • 对于 i=1,j=2i=1, j=2t1t_1 的第一个字符是 s[0]s[0]t2t_2 的最后一个字符是 s[n1]s[n-1]
    • 因为 s[0]s[n1]s[0] \ne s[n-1],所以条件成立
    • k2k \ge 2,满足要求

    因此这种情况下答案是 "YES"


    必要性证明

    s[0]=s[n1]s[0] = s[n-1],则 ss 不是好字符串。

    假设存在一种分割方式 s=t1+t2++tks = t_1 + t_2 + \dots + t_kk2k \ge 2)满足条件。

    考虑 t1t_1 的第一个字符:

    • 它一定等于 s[0]s[0]

    考虑 tkt_k 的最后一个字符:

    • 它一定等于 s[n1]s[n-1]

    根据条件,对于 i=1,j=ki=1, j=k,必须有:

    • t1t_1 的第一个字符 \ne tkt_k 的最后一个字符

    即:

    s[0]s[n1]s[0] \ne s[n-1]

    这与假设 s[0]=s[n1]s[0] = s[n-1] 矛盾。

    因此不存在这样的分割,答案为 "NO"


    特殊情况讨论

    需要注意的是,即使 s[0]=s[n1]s[0] = s[n-1],也有可能让 k>2k > 2 来规避 i=1,j=ki=1, j=k 的条件吗?

    不能。因为条件要求对所有 1i<jk1 \le i < j \le k 成立,其中必然包含 i=1,j=ki=1, j=k 这一对。这一对的要求是:

    first(t1)last(tk)\text{first}(t_1) \ne \text{last}(t_k)

    而:

    first(t1)=s[0]\text{first}(t_1) = s[0] last(tk)=s[n1]\text{last}(t_k) = s[n-1]

    只要 s[0]=s[n1]s[0] = s[n-1],这一对就一定违反条件。

    kk 的值不能改变这个事实,因为 t1t_1 总是包含 s[0]s[0] 作为其第一个字符,tkt_k 总是包含 s[n1]s[n-1] 作为其最后一个字符。


    算法步骤

    1. 读入测试用例数 tt
    2. 对于每个测试用例:
      • 读入 nn 和字符串 ss
      • 如果 s[0]s[n1]s[0] \ne s[n-1],输出 "YES"
      • 否则输出 "NO"

    • 1

    信息

    ID
    6678
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    2
    已通过
    1
    上传者