1 条题解

  • 0
    @ 2026-6-19 10:30:37

    📝 题目大意

    给定一个长度为 3 的大写字母字符串 SS,判断它是否属于给定的 7 个特定字符串之一(ACEBDFCEGDFAEGBFACGBD),是则输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析SS 长度固定为 3,只有大写字母,且只有 7 种合法情况。输入规模极小,直接暴力比较即可。
    2. 算法推导
      • 观察 7 个合法字符串:它们都是从 A~G 中某个字母开始,每次向后跳过一个字母(步长为 2),在 A~G 的循环中取 3 个字符。例如 ACE 是 A→C→E,DFA 是 D→F→A(G 之后回到 A)。
      • 等价条件:设 S=s0s1s2S = s_0s_1s_2,则 (s1s0)mod7=2(s_1 - s_0) \bmod 7 = 2(s2s1)mod7=2(s_2 - s_1) \bmod 7 = 2(将 A~G 映射为 0~6)。
      • 但由于只有 7 种情况,std.cpp 中直接用 if 列举所有合法字符串进行判断,简洁且不易出错。
    3. 边界与细节:无特殊边界。注意字符串匹配需严格相等,大小写已限定为大写字母。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),最多比较 7 次,每次比较长度为 3 的字符串。
    • 空间复杂度O(1)O(1),只存储一个长度为 3 的字符串。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	string a;
    	cin >> a;
    	// 直接枚举所有 7 种合法字符串进行判断
    	if(a=="ACE"||a=="BDF"||a=="CEG"||a=="DFA"||a=="EGB"||a=="FAC"||a=="GBD"){
    		cout << "Yes";
    	}else{
    		cout << "No";
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    728
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者