1 条题解

  • 0
    @ 2025-8-24 21:59:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wpy233
    你弱归你弱,py比你弱。 stO 所有关注我的巨佬 Orz

    搬运于2025-08-24 21:59:56,当前版本为作者最后更新于2019-07-05 18:43:16,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    论如何正确地花式AC一道红题

    这道题目,完全可以像楼上的大佬一样,一个sort直接A掉。

    但是本人用了一个更加装逼通俗易懂的方法,以至于萌新们都能看懂QAQ

    偶代码唯一的亮点就是,本人是如何对3个数进行排序

    一开始本人是这么排的:

    int p[3];
    p[0]=min(a,min(b,c));
    p[1]=min(a,max(b,c));
    p[2]=max(a,max(b,c));
    

    惨烈。。。WA掉4个点

    测过样例①后发现,问题出在中间一个数上。

    因为如果这样排,对于a是最大的数的情况就会WA。。。

    所以我们要再来想想,应该怎么排呢?

    紧接着,本人清奇的思路就出来了:

    max(a,b) max(b,c) max(a,c)中,一定有两个是最大的那一个数。
    
    而剩下的那一个,就是中间的那个数。
    

    好了,顺着这个思路走,就AC了。。。

    代码拿走不谢

    #include <bits/stdc++.h>
    using namespace std;
    int p[3];
    int main()
    {
        int a,b,c;
        cin>>a>>b>>c;
        char i,j,k;
        cin>>i>>j>>k;//输入
        p[0]=min(a,min(b,c));
        p[2]=max(a,max(b,c));//处理最大和最小的数
        int x=max(a,b),y=max(a,c),z=max(b,c);
        if(x==y) p[1]=z;
        if(x==z) p[1]=y;
        if(y==z) p[1]=x;//核心部分,处理中间的数
        cout<<p[i-65]<<" "<<p[j-65]<<" "<<p[k-65]<<endl;//输出
        return 0;
    }
    • 1

    信息

    ID
    3386
    时间
    1000ms
    内存
    125MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者