python 蓝桥杯 矩阵拼接

问题描述

已知 3 个矩形的大小依次是 a_{1} \times b_{1}, a_{2} \times b_{2}ab1,ab2 和 a_{3} \times b_{3}ab3 。用这 3 个矩形能拼 出的所有多边形中, 边数最少可以是多少?

例如用 3 \times 23×2 的矩形(用 A 表示)、 4 \times 14×1 的矩形 (用 BB 表示) 和 2 \times 42×4 的矩 形(用 \mathrm{C}C 表示)可以拼出如下 4 边形。

例如用 3 \times 23×2 的矩形 (用 A 表示)、 3 \times 13×1 的矩形(用 BB 表示) 和 1 \times 11×1 的矩 形(用 \mathrm{C}C 表示)可以拼出如下 6 边形。

输入格式

输入包含多组数据。

第一行包含一个整数 TT, 代表数据组数。

以下 TT 行, 每行包含 6 个整数 a_{1}, b_{1}, a_{2}, b_{2}, a_{3}, b_{3}a1,b1,a2,b2,a3,b3, 其中 a_{1}, b_{1}a1,b1 是第一个矩 形的边长, a_{2}, b_{2}a2,b2 是第二个矩形的边长, a_{3}, b_{3}a3,b3 是第三个矩形的边长。

输出格式

对于每组数据, 输出一个整数代表答案。

样例输入

2
2 3 4 1 2 4
1 2 3 4 5 6

样例输出

4
6

评测用例规模与约定

运行限制

  • 最大运行时间:1s

  • 最大运行内存: 512M

代码展示

import os
import sys

# 请在此输入您的代码
def check1(x1, x2, x3):

   #完全匹配,是一个四边形
  if x1>=x2 and x1>=x3:
    #当x1作为最大边时
    if x1==x2+x3 and a[2]+a[3]-x2 == a[4]+a[5]-x3:
      return True
        
  if x2>=x1 and x2>=x3:
    if x2==x1+x3 and a[0]+a[1]-x1 == a[4]+a[5]-x3:
      return True

     
  if x3>=x1 and x3>=x1:
    if x3==x1+x2 and a[0]+a[1]-x1 == a[2]+a[3]-x2:
      return True

        
def check2(x1, x2, x3):
  #完全匹配,是一个四边形
  if x1>=x2 and x1>=x3:
    if x1==x2+x3:
      return True
  if x2>=x1 and x2>=x3:
    if x2==x1+x3:
      return True

     
  if x3>=x1 and x3>=x2:
    if x3==x1+x2 :
      return True
        
        
T = int(input())
for t in range(T):
  a = list(map(int, input().split()))
  ans = 8
    
    #将三个矩形的边分别互相组合,一个矩形两条边,两种摆放情况(一横一竖);三个矩形,共有 2x2x2 种情况。
  for i in range(0,2):#遍历下标 0, 1:
    for j in range(2,4):#遍历下标 2, 3:
      for k in range(4,6):#遍历下标 4, 5:
        x1, x2, x3 = a[i],a[j],a[k] #分别将三条边取出来,通过计算边的大小关系考虑三条表的组合的多边形,有四边形,六边形,八边形,:
        if x1==x2 and x2==x3: #三条边都相等为矩形
          ans = min(ans, 4)
                    
        if check1(x1, x2, x3):#这种四边形需要拼接才可以
          ans = min(ans, 4)
        if check2(x1, x2, x3):
          ans = min(ans, 6)
        if x1==x2 or x1==x3 or x2==x3:#当至少有两条边相等时,那么它至少为六边形:
          ans = min(ans, 6)
                    
       
  print(ans)                   
 

运行结果:

4
8

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值