A. Three Pairwise Maximums题解?
第一次发博客祭!!!(我已入坑,感觉良好
开头发一篇水解:A. Three Pairwise Maximums
胡扯部分:
填完志愿后联系了一波学院的大佬们,大佬队长说让我暑假打打CF开开心心学学算法随便水水上个蓝(当时我根本不知道蓝是什么概念)于是就注册了个CF账号从水题开始看。哈哈cf没有什么难的嘛,(当时我看的是道700分的题)我虽然高中只混了个弱省3=,但这种题就是在**我,于是刷完代码提交 AC 恍惚之中,我想起队长让我上蓝,。。。。那么问题来了,蓝 该怎么上呢 百度了一波之后我发现要打比赛到1700左右的分数才能上蓝,好吧,那1700分是什么难度的题呢,随便找了几道1700的题发现不会(找不到任何可以运用之前混混噩噩学过的算法的迹象)我开始惶恐起来,又想到了队长口中的“随便水水上个蓝” 我瞬间裂开,没事没事…我还只是个预备役选手…自我安慰一阵后看看之前的比赛吧于是就看到了A. Three Pairwise Maximums Div.3的A题(我承认即使是这题仍然让我思索了十几分钟)好吧好吧 接下来goto 正题;
正题:
题目:a,b,c三个正整数,a,b中的较大值是x,a,c中的较大值是y,b,c中的较大值是z。问给三个数x,y,z能否给出一种a,b,c的组合,能的话以任意顺序输出a,b,c不能的话扣NO
思考:那我们来想如果a是a,b,c中最大的数那一定有x==y 而z一定小于或等于x和y emm好像发现了!a,b,c三个数中如果各不相同那么结果一定为NO,再来试试b,c为最大的数的情况 发现符合这一特征:x,y,z中一定有两个数相等,并且不与其他两个数相等的那个数一定小于相等的那两个数 这样我们就可以判断YES与NO啦 接下来怎么输出呢试过两组数据就能得出把较大的数输出一遍,把较小的数输出两边就行了 上代码
#include<iostream>#include<cmath>#define ll long longusing namespace std;int main(){ll n;cin>>n;for(ll i=1;i<=n;i++){int x,y,z;cin>>x>>y>>z;int k=max(max(x,y),z);//较大的数int o=min(min(x,y),z);//较小的数if(x!=y&&y!=z&&z!=x){cout<<\"NO\"<<endl;//如果三数都互不相等的话输出NOcontinue;}if((k>x&&k>y)||(k>x&&k>z)||(k>z&&k>y)){cout<<\"NO\"<<endl;//如果不与另两个数相等的那个数大于那两个相等的数则输出NOcontinue;}cout<<\"YES\"<<endl;cout<<k<<\" \"<<o<<\" \"<<o<<endl;}return 0;}