1 条题解

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

    📝 题目大意

    给定三个字符 SAB,SAC,SBCS_{\mathrm{AB}}, S_{\mathrm{AC}}, S_{\mathrm{BC}},分别表示 AABBAACCBBCC 的年龄大小关系(< 表示前者更年轻,> 表示前者更年长)。保证输入无矛盾,求三兄弟中年龄排第二(老二)的是谁。

    💡 解题思路

    1. 题目分析:只有三个人,且输入保证自洽,因此只需根据三个比较关系推断出中间那个人。数据范围极小(每个字符仅为 <>),可以直接枚举或逻辑判断。

    2. 算法推导

      • 代码中读入三个字符 a(SABS_{\mathrm{AB}}), b(SACS_{\mathrm{AC}}), c(SBCS_{\mathrm{BC}})。
      • 核心观察:如果 AA 是老二,那么 AA 必然比一个人大、比另一个人小,即 SABS_{\mathrm{AB}}SACS_{\mathrm{AC}} 必然不同(一个 < 一个 >)。因此 a != b 时,答案是 A
      • AA 不是老二(即 a == b),则 AA 要么是最大、要么是最小,此时老二在 BBCC 之间:
        • a == c 时(SAB=SBCS_{\mathrm{AB}} = S_{\mathrm{BC}}):无论 AA 是最大还是最小,BB 都处于中间位置,答案是 B
        • a != c 时(SABSBCS_{\mathrm{AB}} \neq S_{\mathrm{BC}}):CC 处于中间位置,答案是 C
    3. 边界与细节

      • 输入保证是三个字符,且均为 <>,不会出现 = 或非法字符。
      • 由于只有三个人,使用 cin 读取字符即可,无需特殊处理空格(cin 默认跳过空白符)。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次比较。
    • 空间复杂度O(1)O(1),仅使用三个字符变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	ios::sync_with_stdio(0);
    	cin.tie(0);cout.tie(0);
    	char a,b,c;cin>>a>>b>>c;
    	// a = S_AB, b = S_AC, c = S_BC
    	// 若 A 是老二,则 S_AB 与 S_AC 必不相同(一个 < 一个 >)
    	if(a!=b)cout<<'A';
    	// 否则 A 不是老二(A 是最大或最小),此时若 S_AB == S_BC,则 B 在中间
    	else if(a==c)cout<<'B';
    	// 否则 C 在中间
    	else cout<<'C';
    	return 0;
    }
    
    • 1

    信息

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