21计科程一帆


私信TA

用户名:uq_88617846948

访问量:5231

签 名:

搞哥毛哥在上,俺寻思俺是一个最大最强的技术小子

等  级
排  名 959
经  验 3415
参赛次数 2
文章发表 52
年  龄 19
在职情况 学生
学  校 石河子大学
专  业 计算机科学与技术

  自我简介:

憨憨一个,欢迎大佬指正

解题思路:


三个矩形进行拼接,最终组成的边数仅包含 3 种情况:


1、4 条边,此时 3 个矩形可以组成 1 个大矩形,存在两种可能:

三个矩形存在一条长度相同的边,这样可以按照这条边组成大矩形

三个矩形中存在一个矩形等于另外两个矩形的边长之和,并且另外两个矩形的另一条边相同。


2、6 条边:

三个矩形中任意两个存在相同的边

三个矩形中存在一个矩形等于另外两个矩形的边长之和,并且另外两个矩形的另一条边不同。


3、8 条边,除去上面的所有情况。

这样我们可以轮流判断三个矩形,对于每个矩形的每条边进行逐一判断。


即第 i 个矩形的第 ii 条边、第 j 个矩形的第 jj 条边,第 k 个矩形的第 kk 条边对上述条件进行判断。


因此可以暴力使用 6 重循环,前三重循环枚举 i,j,k ,后三重循环枚举 ii,jj,kk ,最终每种情况根据上述进行分类讨论即可。



注意事项:循环别写错了

参考代码:

t=int(input())

while t>0:

  t-=1

  ans=8

  a=list(map(int,input().split()))

  a=[[a[0],a[1]],[a[2],a[3]],[a[4],a[5]]]

  for i in range(3):

    for j in range(3):

      for k in range(3):

        if i==j or i==k or j==k:

          continue

        for ii in range(2):

          for jj in range(2):

            for kk in range(2):

              if a[i][ii]==a[j][jj]:   #两条边相等

                ans=min(ans,6)

                if a[i][ii]==a[k][kk]:  #三条边相等

                  ans=min(ans,4)

              if a[i][ii]==a[j][jj]+a[k][kk]:  #一条边等于两边之和

                ans=min(ans,6)

                if a[j][jj-1]==a[k][kk-1]:  #一条边等于两边之和,且另外两边相等

                  ans=min(ans,4)

  print(ans)


 

0.0分

11 人评分

  评论区

  • «
  • »