题解 P4414 【[COCI2006-2007#2] ABC】

· · 题解

论如何正确地花式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;
}