解题思路:三个方块各自横竖放的情形有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.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论