解题思路:三个方块各自横竖放的情形有2种,也就是一共2*2*2=8种情形。从左到右(因为从下到上等价于8种中的其它情形从左到右)排列方块,接下来就是几个简单的讨论而已。
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define pii pair<int,int>
int t;
int a[10];
int ans=12345678;
pair<int,int> pair1[5];
bool cmp(pii &x,pii &y){
return x.fir>y.fir;
}
int getans(int a1,int b1,int a2,int b2,int a3,int b3){
pair1[1].fir=a1;
pair1[1].sec=b1;
pair1[2].fir=a2;
pair1[2].sec=b2;
pair1[3].fir=a3;
pair1[3].sec=b3;
sort(pair1+1,pair1+3+1,cmp);//按长从大到小排列
a1=pair1[1].fir;
b1=pair1[1].sec;
a2=pair1[2].fir;
b2=pair1[2].sec;
a3=pair1[3].fir;
b3=pair1[3].sec;
if(a1==a2&&a2==a3)return 4;
if(a1==a2||a2==a3)return 6;
if(a1==a2+a3){
if(b2==b3){
return 4;
}
else{
return 6;
}
}
if(b2==b3){
return 6;
}
return 8;
}
int main(){
scanf("%d",&t);
while(t--){
ans=12345678;
scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
int a1,b1,a2,b2,a3,b3;
for(int i=1;i<=2;i++){
a1=a[i];b1=a[1+2-i];
for(int j=3;j<=4;j++){
a2=a[j];b2=a[3+4-j];
for(int k=5;k<=6;k++){
a3=a[k];b3=a[5+6-k];
ans=min(ans,getans(a1,b1,a2,b2,a3,b3));
}
}
}
printf("%d\n",ans);
}
return 0;
}
0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复