【如何合理使用AI】14届蓝桥杯救急

前言

好吧,和GPT扯了两天淡,发现自己学到的知识倒是很少,还不如自己练题+看别人题解学到的多,所以现在到考试的16天里,拒绝使用AI辅助工具,就自己一个字一个字的敲,包括大家学习中也要少用copilot、cursor等工具,确实能大大提高效率,但和你真正自己写出来的东西差别还是蛮大的,毕竟你不能带着它进考场不是吗,面试题还是得用自己的手来撕,AI确实能极大的帮助我们工作,提高效率,但他也只是一个好用的工具,并不是你身体的一部分。btw,开始今天的刷题之旅吧~

1、FBI树

题目描述
我们可以把由 “0” 和 “1” 组成的字符串分为三类:全 “0” 串称为 B 串,全 “1” 串称为 I 串,既含 “0” 又含 “1” 的串则称为 F 串。

FBI树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I 结点三种。由一个长度为 2N 的 “01” 串 S 可以构造出一棵 FBI 树 T,递归的构造方法如下:

T 的根结点为 R,其类型与串 S 的类型相同;

若串 S 的长度大于 1,将串 S 从中间分开,分为等长的左右子串 S1 和 S2 ;由左子串 S1 构造 R 的左子树 T1,由右子串 S2 构造 R 的右子树 T2。

现在给定一个长度为 2N 的 “01” 串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。
输入描述
第一行是一个整数 N(0≤N≤10)。

第二行是一个长度为 2 N 的 “01” 串。

输出描述
输出一个字符串,即 FBI 树的后序遍历序列。

class Node://面向对象编程
  def __init__(self,s,l=None,r=None)://初始化左右都为空
    self.l=l
    self.r=r
    if '0' in s and '1' in s://通过判断赋值
      self.val='F'
    elif '1' in s:
      self.val='I'
    else:
      self.val='B'
def build(s)://建树
  if len(s)==1:
    return Node(s)
  root=Node(s,build(s[:len(s)//2]),build(s[len(s)//2:]))//在中间切片
  return root
def postorder(root)://后序遍历序列,左、右、根
  if root:
    postorder(root.l)
    postorder(root.r)
    print(root.val,end="")
  else:
    return
n=int(input())
s=input()
root=build(s)//先建树、在输出
postorder(root)

2、航班时间

题目描述
小 h 前往美国参加了蓝桥杯国际赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到"现在飞机飞得真快,两小时就能到美国了"。

小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。

不久后小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。

对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。

输入描述
一个输入包含多组数据。

输入第一行为一个正整数 T,表示输入数据组数。

每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。

起降时间的格式如下

h1:m1:s1 h2:m2:s2

h1:m1:s1 h3:m3:s3 (+1)

h1:m1:s1 h4:m4:s4 (+2)

表示该航班在当地时间 h1 时 m1 分 s1 秒起飞,

第一种格式表示在当地时间 当日 h2 时 m2 分 s2 秒降落

第二种格式表示在当地时间 次日 h3 时 m3 分 s3 秒降落。

第三种格式表示在当地时间 第三天 h4 时 m4 分 s4 秒降落。

对于此题目中的所有以 h : m : s 形式给出的时间, 保证 ( 0≤h≤23,0≤m,s≤59).

保证输入时间合法,飞行时间不超过 24 小时。

输出描述
对于每一组数据输出一行一个时间 hh:mm:ss,表示飞行时间为 hh 小时 mm 分 ss 秒。

注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写 03:04:05。

def add_ts(s)://python判断字符串是真的简单
    c=0
    if '(+1)' in s: c =24*60*60
    elif '(+2)' in s: c =24*2*60*60
    return c
T=int(input())
for i in range(T):
    s1=input()
    start1=int(s1[:2])*60*60+int(s1[3:5])*60+int(s1[6:8])//一个个拆开,单位s
    end1=int(s1[9:11])*60*60+int(s1[12:14])*60+int(s1[15:17])+add_ts(s1)
    s2=input()
    start2=int(s2[:2])*60*60+int(s2[3:5])*60+int(s2[6:8])
    end2=int(s2[9:11])*60*60+int(s2[12:14])*60+int(s2[15:17])+add_ts(s2)
    t=((end1-start1)+(end2-start2))//2//时差去的时候+,回来-,一加一减不就没了吗
    hour,t=divmod(t,3600)
    minute,second=divmod(t,60)
    print("%02d:%02d:%02d" %(hour,minute,second))

3、回文判断

在这里插入图片描述

def check(s):
  t=len(s)
  for i in range(t//2):
    if s[i]!=s[t-1-i]:
      return 'N'
  else:
    return 'Y'
s=str(input())
print(check(s))

这题送分

结语

摆烂了两天,还是先把这个发出去吧

猜你喜欢

转载自blog.csdn.net/weixin_53415043/article/details/129732451