前言
好吧,和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))
这题送分
结语
摆烂了两天,还是先把这个发出去吧