试题 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: 单峰序列
不会