You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeforces Round 834 Div3 Sim-Sim问题代码提交错误排查求助

Codeforces Round 834 Div3 Sim-Sim 代码错误排查

核心错误:字符大小写不匹配

你的代码中判断字符时使用了大小写混合的写法(比如'Y'是大写,'e'、's'是小写),但题目中的输入字符串是全大写的(例如YES、ESY)。这会导致所有合法的输入都无法匹配到正确的条件分支,直接输出NO,这是提交错误的最主要原因。

其他错误与问题

1. 长度为2的字符串判断遗漏合法情况

根据问题规则,YE是合法的Sim-Sim字符串(属于YES循环的连续两位),但你的代码仅将SY和ES判定为合法,遗漏了YE,导致这类测试用例输出错误结果。

2. is_the_same函数逻辑混乱且冗余

  • 循环条件while len(palavraa)!=0毫无意义,因为函数内从未修改过palavraa的长度,循环只能通过break终止,容易出现逻辑漏洞。
  • 检查逻辑绕远路:正确的判断逻辑应该是基于循环单元的模运算,即对于字符串的每个位置k,字符应等于对应循环单元的k % 3位,而你的代码通过维护三个索引逐个检查,逻辑复杂且容易出错。

3. 主函数存在重复的条件分支

代码中有两个完全相同的elif分支:

elif palavra[0]=='e' and palavra[1]=='s' and palavra[2]=='Y':
    ...

这属于冗余代码,虽然不会直接导致错误,但会降低代码可读性,也容易让人误以为覆盖了更多情况。

修复后的代码示例

def is_sim_sim(s):
    # 定义所有合法的循环单元
    units = ["YES", "ESY", "SYE"]
    # 检查长度为2的情况
    if len(s) == 2:
        return any(s == unit[:2] or s == unit[1:] for unit in units)
    # 检查长度≥3的情况
    for unit in units:
        valid = True
        for i in range(len(s)):
            if s[i] != unit[i % 3]:
                valid = False
                break
        if valid:
            return True
    return False

t = int(input())
for _ in range(t):
    s = input().strip()
    if len(s) < 2:
        print("NO")
    else:
        print("YES" if is_sim_sim(s) else "NO")

修复说明

  1. 统一使用大写字符匹配,符合题目输入格式。
  2. 长度为2的情况:检查是否是任意合法循环单元的连续两位(包括前两位和后两位),覆盖所有合法情况。
  3. 长度≥3的情况:遍历所有合法循环单元,通过模运算检查每个位置的字符是否符合循环规则,逻辑简洁清晰。
  4. 移除冗余代码,优化输入处理逻辑。

内容的提问来源于stack exchange,提问作者David feoerwg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:30:50