承重计算
data=[[7],
[5,8],
[7,8,8],
[9,2,7,2],
[8,1,4,9,1],
[8,1,8,8,4,1],
[7,9,6,1,4,5,4],
[5,6,5,5,6,9,5,6],
[5,5,4,7,9,3,5,5,1],
[7,5,7,9,7,4,7,3,3,1],
[4,6,4,5,5,8,8,3,2,4,3],
[1,1,3,3,1,6,6,5,5,4,4,2],
[9,9,9,2,1,9,1,9,2,9,5,7,9],
[4,3,3,7,7,9,3,6,1,3,8,8,3,7],
[3,6,8,1,5,3,9,5,8,3,8,1,8,3,3],
[8,3,2,3,3,5,5,8,5,4,2,8,6,7,6,9],
[8,1,8,1,8,4,6,2,2,1,7,9,4,2,3,3,4],
[2,8,4,2,2,9,9,2,8,3,4,9,6,3,9,4,6,9],
[7,9,7,4,9,7,6,6,2,8,9,4,1,8,1,7,2,1,6],
[9,2,8,6,4,2,7,9,5,4,1,2,5,1,7,3,9,8,3,3],
[5,2,1,6,7,9,3,2,8,9,5,5,6,6,6,2,1,8,7,9,9],
[6,7,1,8,8,7,5,3,6,5,4,7,3,4,6,7,8,1,3,2,7,4],
[2,2,6,3,5,3,4,9,2,4,5,7,6,6,3,2,7,2,4,8,5,5,4],
[7,4,4,5,8,3,3,8,1,8,6,3,2,1,6,2,6,4,6,3,8,2,9,6],
[1,2,4,1,3,3,5,3,4,9,6,3,8,6,5,9,1,5,3,2,6,8,8,5,3],
[2,2,7,9,3,3,2,8,6,9,8,4,4,9,5,8,2,6,3,4,8,4,9,3,8,8],
[7,7,7,9,7,5,2,7,9,2,5,1,9,2,6,5,3,9,3,5,7,3,5,4,2,8,9,],
[7,7,6,6,8,7,5,5,8,2,4,7,7,4,7,2,6,9,2,1,8,2,9,8,5,7,3,6],
[5,9,4,5,5,7,5,5,6,3,5,3,9,5,8,9,5,4,1,2,6,1,4,3,5,3,2,4,1],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
for i in range(1,30):
for j in range(i+1):
if(j==0):
data[i][j]+=data[i-1][0]/2.0
elif j==i:
data[i][j] += data[i-1][j-1]/2.0
else:
data[i][j]+=data[i-1][j-1]/2.0+data[i-1][j]/2.0
print(int(2086458231/min(data[29])*max(data[29])))
相乘
for i in range(100000,100000000):
if i*2021%1000000007==999999999:
print(i)
break
#print(17812964)
完全二叉树的权值
import math
n=int(input())
arr=[int(i) for i in input().split()]
deep=int(math.log(2,n)+1
ans=[]
for i in range(deep):
ans.append(sum(arr[2**i-1:2**i*2-1])
print(ans.index(max(ans))+1)
时间显示
ms_in = int(input())
s_in = int(ms_in / 1000) # 舍去ms部分转为秒
min_in = int(s_in / 60)
s = s_in % 60 # 秒部分
h_in = int(min_in / 60)
m = min_in % 60# 分部分
h = h_in % 24# 时部分
print("%02d:%02d:%02d" % (h, m, s))
等差素数列
对于长度为k的素数等差数列,它们的公差能被小于k的所有素数整除
print(2*3*5*7)
路径
from math import *
import sys
max=sys.maxsize
def lcm(x,y):
return x*y//gcd(x,y)
dp=[max]*2022
dp[1]=0
for i in range(1,2022):
for j in range(i+1,i+22):
if j>2021:
break
lcmv=lcm(i,j)
dp[j]=min(dp[j],dp[i]+lcmv)
print(dp[2021])
#10266837
跳跃
n,m=(int(x) for x in input().split())
map1=[]
for i in range(n):
a=[int(x) for x in input().split()]
map1.append(a)
dp=[[-100]*(m+3) for i in range(n+3)]
for i in range(3,n+3):
for j in range(3,m+3):
if i==3 and j==3:
dp[i][j]=map1[i-3][j-3]
else:
dp[i][j]=map1[i-3][j-3]+max(dp[i-1][j],dp[i-2][j],dp[i-3][j],dp[i-1][j-1],
dp[i-1][j-2],dp[i-2][j-1],dp[i-2][j-2],dp[i][j-1],dp[i][j-2],dp[i][j-3])
print(dp[-1][-1])
最大降雨量
不需要去管前面的,只需要第四周的时候达到当前的最大值就行
1 2 3 46 47 48 49 46 第七周
4 5 6 42 43 44 45 42 第六周
7 8 9 38 39 40 41 38 第五周
10 11 34 35 36 37 34 第四周
print(34)
回文日期
from datetime import *
mydate=input()
a=int(mydate[0:4])
b=int(mydate[4:6])
c=int(mydate[6:])
x=date(a,b,c)
flag=True
for i in range(99999999):
x=x+timedelta(1)
s=str(x).replace('-','')
if s==s[::-1]:
if flag:
print(s)
flag=False
if s[0]==s[2]==s[-1]==s[-3] and s[1]==s[3]==s[-2]==s[-4]:
print(s)
break
跑步锻炼
from datetime import*
a=date(2000,1,1)
b=date(2020,10,1)
ans=0
while a<=b:
if a.weekday()==0 or a.day==1:
ans+=1
ans+=1
a+=timedelta(1)
print(ans)
2021省赛空间
print(256*1024*1024*8//32)
明明的随机数
import os
import sys
# hash表
n=int(input())
hashtable={}
ans=[]
for i in input().split():
if int(i) not in hashtable:
hashtable[int(i)]=i
ans.append(int(i))
ans.sort()
m=len(ans)
print(m)
for i in range(m):
print(ans[i],end=' ')
#集合
n=int(input())
arr=[int(i) for i in input().split()]
sset=set(arr)
arr1=list(arr)
arr1.sort()
#纯数
def pure(x):
while x:
if x%10 in [0,1,4,6,8,9]:
return False
x//=10 #注意:整除是 //
return True
#质数
def prime(x):
for i in range(2,int(x**0.5)+1):
if x%i==0:
return False
return True
#纯质数
cnt=0
for i in range(1,20210606):
if pure(i) and prime(i): #注意:先判断纯数,再判断质数
print(i)
cnt+=1
print(cnt) #输出结果:1903
points=[[x,y] for x in range(20) for y in range(21)]
docker=set()
for i in points:
x1,y1=i[0],i[1]
for j in points:
x2,y2=j[0],j[1]
if x1==x2:#斜率不存在
continue
#斜率
k=(y2-y1)/(x2-x1)
#截距
b=(x2*y1-x1*y2)/(x2-x1)
if (k,b) not in docker:
docker.add((k,b))
print(len(docker)+20)
from datetime import*
a=date(2000,1,1)
b=date(2020,10,1)
ans=0
while a<b:
if a.weekday()==0 or a.day==1:
ans+=2
else:
ans+=1
a+=timedelta(1)
print(ans)
i=1
count=0
while True:
count+=str(i).count("1")
if count==2021:
print(i)
break
i+=1
差分前缀和
树木上药
n,m=map(int,input().split())
dp=[0]*n
for i in range(m):
l,r,cost=map(int,input().split())
dp[l-1]+=cost
dp[r]-=cost
for i in range(n):
dp[i]+=dp[i-1]
print(sum(dp))
小明的彩灯
n,q=map(int,input().split())
a=list(map(int,input().split()))
dp=[0]*(n+1)
for i in range(q):
l,r,x=map(int,input().split())
dp[l-1]+=x
dp[r]-=x
for i in range(1,n):
dp[i]+=dp[i-1]
for i in range(n):
print(max(dp[i]+a[i],0),end=" ")
#暴力
n, m=map(int,input().split())
arr=list(map(int,input().split()))
for i in range(m):
l,r=map(int,input().split())
print(sum(a[l-1:r]))
#线性DP
n,m=map(int,input().split())
a=[0]+list(map(int,input().split()))
dp=[0 for i in range(n+1)]
for i in range(1,n+1):
dp[i]=dp[i-1]+a[i]
for i in range(m):
l,r=map(int,input().split())
print(dp[r]-dp[l-1])
print(dp)
from queue import PriorityQueue
n=int(input())
a=list(map(int,input().split()))
q=PriorityQueue
for i in a:
q.put(i)
ans=0
while q.qsize()!=1:
a=q.get()
b=q.get()
ans+=a+b
q.put(a+b)
print(ans)
from datetime import *
a=data(1900,1,1)
b=data(9999,12,31)
ans=0
while a<b:
if '2' in str(a):
ans+=1
a+=timedelta(1)
#从a遍历到b前一个,因为日历函数规定,日期不超过9999年12月31日
print(ans+1)
from datetime import *
a=data(1949,10,1)
b=data(2012,10,1)
ans=0
while(a<=b):
#weekday下标从0开始,即星期一
if a.weekday()==6 and a.month==10 and a.day==1:
ans+=1
a+=timedelta(1)
print(ans)
import itertools
a=[]
for i in itertools.permutations('123456789'):
i=''.join(i)
for j in range(1,9):
b=str(int(i[:j])*int(i[j:]))
if len(set(b))==9 and '0' not in b:
a.append(b)
print(max(a))
s=list(input())
ans=sorted(sorted(s),key=lambda x:s.count(x),reverse=True)[0]
print(ans)
print(s.count(ans))
ans=0
for i in range(1,2021):
ans+=str(i).count('2')
print(ans)
n=2021041820210418
ans=0
d=set()
for i in range(1,int(n**0.5)+1):
if n%i==0:
d.add(i)
d.add(n/i)
for i in d:
for j in d:
for l in d:
if i*j*l==n:
ans+=1
print(ans)
n=int(input())
sum=0
max=0
min=100
for i in range(n):
temp=int(input())
if temp>max:
max=temp
if temp<min:
min=temp
sum+=temp
print(max)
print(min)
print('{:.2f}'.format(sum/n))
n=int(input())
a=[int(input()) for i in range(n)]
print(max(a))
print(min(a))
print("{:.2f}".format(sum(a)/n))
n=int(input())
best=good=0
for i in range(n):
temp=int(input())
if temp>=85:
best+=1
elif temp>=60:
good+=1
print("{:.0f}%".format((best+good)/n*100))
print("{:.0f}%".format((best)/n*100))
ans=0
for i in range(1,1000):
for j in range(i+1,1000):
a=sorted(list(str(i)+str(j)))
b=i*j
c=sorted(list(str(b)))
if a==c and len(set(a))==len(set(c))==4 and 1000<b<9999:
ans+=1
print(ans)
import itertools
for i in itertools.permutations('1234567890'):
s=''.join(i)
a,b,c=int(s[0:4]),int(s[4:8]),int(s[8:])
if (a-b)*c==900:
if len(str(c))==2:
#print('('+str(a)+'-'+str(b)+')*'+str(c)+'==900')
print('(%d-%d)*%d==900'%(a,b,c))
time=int(input())
h=int(time/3600)
m=int((time%3600)/60)
s=int((time%3600)%60)
print(str(h)+":"+str(m)+":"+str(s))
求最小公倍数
def lcm(a,b):
#最大公约数×最小公倍数=a×b
s=a*b
while b:
a,b=b,a%b
return int(s/a)
n=int(input())
if n>=1 and n<=200:
s1=list(map(int,input().split()))
s1.sort()
for i in range(len(s1)):
#end=''输出不换行
print(s1[i],end='')
a,b=map(int,input().split())
print(a+b)
n=int(input())
F1,F2=1,1
for i in range(3,n+1):
F1,F2=F2%10007,(F1+F2)%10007
print(F2)
import math
r=int(input())
s=math.pi*r*r
print('%.7f'%f)
n=int(input())
ans=0.5*n*(n+1)
print(int(sum))
import math
ans={
"0 0":0,
"1 1":0,
"2 2":0,
"0 1":-1,
"1 2":-1,
"2 0":-1,
"1 0":1,
"2 1":1,
"0 2":1,
}
inp=input()
print(ans.get(inp))
ord()是chr()的配对函数,返回对应的ASCII码值
s=input()
ans=0
for i in range(len(s)):
for j in range(i+1,len(s)):
ans+=abs(ord(s[i])-ord(s[j]))
print(ans)
deque结构可以看作是内置的list结构的加强版,提供了在两端插入和删除的操作。
import collections
#上下左右四个方位对应
x=[1,0,-1,0]
y=[0,1,0,-1]
#前驱节点
pre={(0,0):(0,0),(2020,11):(2020,14),(11,14):(11,14),(2000,2000):(2000,2000)}
ans=4
queue=collections.deque()
#
queue.append((0,0,0))
queue.append((2020,11,0))
queue.append((11,14,0))
queue.append((2000,2000,0))
while queue:
#取单个节点
t=queue.popleft()
if t[2]==2020:
print(ans)
break
else:
for i in range(4):
nextx,nexty=t[0]+x[i],t[1]+y[i]
if (nextx,nexty) not in pre.keys():
pre[(nextx,nexty)]=(t[0],t[1])
queue.append((nextx,nexty,t[2]+1))
ans+=1
如果使用循环,程序的的性能可能更高;如果使用递归,程序可能更容易理解。