【蓝桥杯】第十三届省赛第二场 Python 大学 B 组 题解

试题 A: 练习

在这里插入图片描述

ABC

试题 B: 三角回文数

在这里插入图片描述

from math import  *
a=sqrt(2*20220514)
print(a)
print(6359*6360/2)
for i in range(6360,10000):
    a=i*(i+1)//2
    a=str(a)
    a1=a[::-1]
    if a==a1:
        print(a)
        break

35133153

试题 C: 卡片

在这里插入图片描述

'''
1 11
3 11 12 22
6 11 12 13 22 23 33
10 11 12 13 14 22 23 24 33 34 44
'''
from math import *
n=int(input())
def ka(k):
    res=(-1+sqrt(1+8*k))/2
    res=ceil(res)
    return res
print(ka(n))

试了几个数,没问题

这题我真看不太懂,样例给的好像是按时间降序排列,按编号升序排列。
如果是按编号的话,那么时间就没什么用了。

试题 D: 考勤刷卡

在这里插入图片描述

在这里插入图片描述

'''
4
13:05:42 103
14:07:12 4567
15:03:00 103
17:00:21 1
'''
n=int(input())
a=[]
for i in range(n):
    s=input()
    s=(s[9:])
    s=int(s)
    if s not in a:
        a.append(s)
a.sort()
for i in a:
    print(i)

试题 E: 最大和

在这里插入图片描述

在这里插入图片描述

n=int(input())
a=[0]+list(map(int,input().split()))
f=a.copy()
for i in range(1,n+1):
    f[i]+=f[i-1]
from math import *
def yin(x,n,p):
    if (n-p)%x==0:
        return 1
def zhi(x,n,p):
    f=1
    if x==1:
        return 0
    elif x==2 or x==3:
        return 1
    elif (n-p)%6!=1 and (n-p)%6!=5:
        return 0
    else:
        for i in range(5,int(sqrt(n-p))+1,6):
            if (n-p)%i==0 or (n-p)%(i+2)==0:
                f=0
                break
    return f
def d(n,p):
    if n-p==1:
        return 1
    for i in range(2,4):
        if zhi(i,n,p) and yin(i,n,p):
            return i
    for i in range(5,100000000,6):
        if zhi(i, n, p) and yin(i, n, p):
            return i
        i=i+2
        if zhi(i, n, p) and yin(i, n, p):
            return i
dd=[0]
for i in range(1,n+1):
    dd.append(d(n,i))
for i in range(2,n+1):
    f[i]=max(f[i],f[i-1]+a[i])
    if i-dd[i]>=1:
        f[i]=max(f[i],f[i-dd[i]]+a[i])
        #print(i-dd[i],i)
print(f[n])


刚开始用f=a,结果a也跟着f变,尴尬了,然后用了copy就好了。

试题 F: 染色时间

在这里插入图片描述
在这里插入图片描述

n,m=map(int,input().split())
a=[0]
from math import *
f=[inf]*(n*m+1)
for i in range(n):
    a.extend(list(map(int,input().split())))
b=[i for i in range(n*m+1)]
c=[[]for i in range(n*m+1)]
#print(a,f)
f[1]=a[1]
f[0]=0
t0=a[1]
def ke(x0,x):
    if x0%m==0:#zui you
        if x==x0+1:
            return 0
    if x0%m==1:#zui zuo
        if x==x0-1:
            return 0
    if x<=n*m and x>=1:
        return 1
for i in range(1,n*m+1):
    if ke(i,i-1):
        c[i].append(i-1)
    if ke(i,i+1):
        c[i].append(i+1)
    if ke(i,i-m):
        c[i].append(i-m)
    if ke(i,i+m):
        c[i].append(i+m)
#print(c)
for t in range(1,n*m+1):
  for i in c[t]:
    f[i]=min(f[i],a[i]+f[t])
#print(f)
print(max(f))

试题 G: k 倍区间

在这里插入图片描述
在这里插入图片描述

n,k=map(int,input().split())
a=[0]+list(map(int,input().split()))
aa=a.copy()
for i in range(1,n+1):
    aa[i]+=aa[i-1]
#print(aa)
ans=0
for i in range(1,n+1):
    for j in range(i):
        if (a[i]-a[j])%k==0 and (a[i]-a[j])//k>=0:
            ans+=1
print(ans)

试题 H: 选素数

在这里插入图片描述
在这里插入图片描述

from math import *
t=int(input())
def feiyin(s,x):
    if (s)%x!=0 and x<s:
        return 1
def zhi(x):
    f=1
    if x==1:
        return 0
    elif x==2 or x==3:
        return 1
    elif (x)%6!=1 and (x)%6!=5:
        return 0
    else:
        for i in range(5,int(sqrt(x))+1,6):
            if (x)%i==0 or (x)%(i+2)==0:
                f=0
                break
    return f
def xuan(p):
    global s,y,ans
    if zhi(p) and feiyin(s, p):
        for y in range(s + 1, 1000000):
            if y % p == 0:
                s = y
                ans += 1
                return 1
    return 0
for i in range(t):
    ans=0
    s,t=map(int,input().split())
    while 1:
        if s>=t:
            print(ans)
            break
        if xuan(2)==1:continue
        if xuan(3)==1:continue
        for p in range(5,10000000,6):
            if xuan(p)==1:
                break
            p=p+2
            if xuan(p)==1:
                break

试题 I: 第几小

在这里插入图片描述
在这里插入图片描述

n=int(input())
a=[0]+list(map(int,input().split()))
t=int(input())
for i in range(t):
    s=list(map(int,input().split()))
    if s[0]==1:
        a[s[1]]=s[2]
        #print(a)
    if s[0]==2:
        aa=a[s[1]:s[2]+1].copy()
        aa.sort()
        print(aa.index(a[s[3]])+1)
'''
3
1 2 3
3
2 1 3 2
1 2 4
2 1 3 2
'''

试题 J: 单峰序列

在这里插入图片描述
在这里插入图片描述
不会

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值