蓝桥杯复盘记录002(2023)

知识点

1.输入大小写转小写

s = input().lower()

2.datetime的使用

from datetime import datetime, timedelta

dt1 = datetime(2023, 1, 1)#默认是2023-01-01 00:00:00
date = dt1.strftime('%Y%m%d')#格式化成20230101这种格式
dt1 += timedelta(days=1)#日期加1 2023-01-02 00:00:00

3.文件读取

4.字典序,cmp

from functools import cmp_to_key
def cmp(s1, s2):
    if s1 + s2 <= s2 + s1:
        return -1
    else:
        return 1
n = int(input())
a = []
for i in range(n):
    a.append(input())
a.sort(key= cmp_to_key(cmp))
print("".join(a))

题目

1.lanqiao2417

str2 = "lanqiao"

s = input().lower()
if s == str2:
    print("yes")
else:
    print("no")

2.lanqiao3491

好在是填空,我直接暴力!

ans = 0
def islucky(s1, s2):
    sum1 = 0
    sum2 = 0
    for i in range(len(s1)):
        sum1 += int(s1[i])
        sum2 += int(s2[i])
    if sum1 == sum2:
        return True
    else:
        return False

for i in range(1, 100000000):
    s = str(i)
    if len(s) % 2 == 1:
        continue
    else:
        s1 = s[:len(s) // 2]
        s2 = s[len(s)//2:]
        if islucky(s1, s2):
            ans += 1

3.lanqiao3492

from datetime import datetime, timedelta

st = '''5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
'''
st = list(st.split())
#print(st)
dt1 = datetime(2023, 1, 1)#默认是2023-01-01 00:00:00
dt2 = datetime(2023, 12, 31)
res = 0
# 从20230101开始枚举到20231231
while dt2 >= dt1:
    date = dt1.strftime('%Y%m%d')#格式化成20230101这种格式
    num = 0
    for i in range(len(st)):
        if num == 8:#如果找到8位数字与当前日期相等res+1,同样日期算一个,直接break
            res += 1
            break
        if date[num] == st[i]:#枚举每一个数字== date[num]
            num += 1
    dt1 += timedelta(days=1)#日期加1
print(res)

4.lanqiao 3493

print(sum(list(range(20230409))))

双周赛被薄纱了0.0

5.lanqiao17035

from functools import cmp_to_key
def cmp(s1, s2):
    if s1 + s2 <= s2 + s1:
        return -1
    else:
        return 1
n = int(input())
a = []
for i in range(n):
    a.append(input())
a.sort(key= cmp_to_key(cmp))
print("".join(a))

6.lanqiao17028

我是没有想到快速幂过不了这道题0.0


t = int(input())
for i in range(t):
    x, p = map(int, input().split())
    c = 10
    res = pow(x, p, c)
    print(res)

7.lanqiao17029

思路:

看到答案是由01组合而成,x3 = a2-a1可以直接得到,x4 = a3-a2+x1....以此类推xn = an-1 - an-2 + xn-3 . 特殊情况,当只有两个方程的时候,只有三种情况。当方程数大于等于三个的时候,先枚举出前三种的情况,[0,0,x3], [0,1,x3],[1,1,x3],[1,0,x3],标识flag = 0表示[0,1,x3]可以,否则为[1,0,x3],根据xn = an-1 - an-2 + xn-3 .

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

if n <=2:
    if a[0] == 0:
        print(0, 0)
    elif a[0] == 1:
        print(0, 1)
    else:
        print(1, 1)
else:
    x3 = a[1] - a[0]
    flag = 0
    if a[0] == 0:
        temp = [0, 0, x3]
    elif a[0] == 1:
        temp = [0, 1, x3]
    else:
        temp = [1, 1, x3]
    
    for i in range(2, n-1):
        t = a[i]-a[i-1]+temp[i-2]
        if 0<= t < 2:
            temp.append(t)
        else:
            flag = 1
            break
    if a[-1] != temp[-1] + temp[-2]:
        flag = 1
    if flag == 1:
        temp = [1, 0, x3]
        for i in range(2, n-1):
            temp.append(a[i]-a[i-1]+temp[i-2])
    print(" ".join([str(i) for i in temp]))

8.lanqiao17026

思路:

只要x在max_dp[-1] 和min_dp[-1]之间就可以。其中:

min_dp[i]表示小蓝走到位置i时候的最小心情为多少。

max_dp[i]表示小蓝走到位置i的时候的最大心情为多少。

t = int(input())

def solve():
    n,x = map(int, input().split())
    a = [0] + list(map(int,input().split())) + [0]
    min_dp = [0]*(n+2)
    max_dp = [0]*(n+2)
    min_dp[1] = max_dp[1] = a[1]
    for i in range(2, n+2):
        min_dp[i] = min(min_dp[i-1], min_dp[i-2]) + a[i]
        max_dp[i] = max(max_dp[i-1], max_dp[i-2]) + a[i]
    if min_dp[-1] <= x <= max_dp[-1]:
        print("Yes")
    else:
        print("No")

for i in range(t):
    solve()

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值