202212-1 现值计算
nk = input().split()
n = int(nk[0])
k = float(nk[1])
price1 = input().split()
price = [float(i) for i in price1]
sum = 0.0
s = 1.0
for i in range(n+1):
sum += s*price[i]
s *= 1/(1+k)
print(sum)
202212-2 训练计划
nm = input().split()
n = int(nm[0])
m = int(nm[1])
relylist = input().split()
rely = [ int(i) for i in relylist ]
timelist = input().split()
time = [ int(i) for i in timelist ]
child = []
for i in range(m):
child.append([])
for j in range(m):
if rely[j] == i+1:
child[-1].append(j+1)
#print(child)
def dfstree(nowtime, nowwork):
earlist = nowtime + time[nowwork-1]
earlying = earlist
if child[nowwork-1] == []:
return earlist
else:
for i in child[nowwork-1]:
a = dfstree(earlist, i)
if a > earlying:
earlying = a
return earlying
#print(dfstree(1,1))
maxtime = 0
for i in range(m):
a = dfstree(1,i+1)
if a>maxtime:
maxtime = a
maxtime -= 1
#print(maxtime)
est = []
for i in range(m):
est.append(0)
def dfstree2(nowtime, nowwork):
earlist = nowtime + time[nowwork-1]
if est[nowwork-1] == 0:
est[nowwork-1] = nowtime
#print(est)
earlying = earlist
if child[nowwork-1] == []:
return earlist
else:
for i in child[nowwork-1]:
a = dfstree2(earlist, i)
if a > earlying:
earlying = a
return earlying
for i in range(m):
dfstree2(1,i+1)
for i in range(m):
print(est[i],end = ' ')
print()
if maxtime<=n:
for i in range(m):
print(n-dfstree(1,i+1)+2,end=' ')
202212-3 JPEG解码
这题突出一个流程多但是不难
from math import *
q = []
for i in range(8):
a = input().split()
q.append([int(j) for j in a])
n = int(input())
t = int(input())
m11 = input().split()
m1 = [int(j) for j in m11]
for i in range(64-n):
m1.append(0)
m2 = []
for i in range(8):
m2.append([0,0,0,0,0,0,0,0])
right = [0,1]
down = [1,0]
pie = [1,-1]
ti = [-1,1]
turning = [right,down]
direc = [pie,ti]
turn = 0
go = 1
a = 0
b = 0
for i in range(64):
#print(i,a,b)
m2[a][b] = m1[i]
if a+direc[go][0]<0 or b+direc[go][1]<0 or a+direc[go][0]>7 or b+direc[go][1]>7:
if a==7 and b==0:
turn = (turn+1)%2
a+=turning[turn][0]
b+=turning[turn][1]
turn = (turn+1)%2
go = (go+1)%2
else:
a+=direc[go][0]
b+=direc[go][1]
#print(m2)
m3 = []
for i in range(8):
m3.append([0,0,0,0,0,0,0,0])
for i in range(8):
for j in range(8):
m3[i][j] = m2[i][j] * q[i][j]
#print(m3)
def alpha(x):
if x!=0:
return 1
else:
return sqrt(0.5)
m4 = []
for i in range(8):
m4.append([0,0,0,0,0,0,0,0])
for i in range(8):
for j in range(8):
for u in range(8):
for v in range(8):
m4[i][j] += 0.25*alpha(u)*alpha(v)*m3[u][v]*cos(pi*(i+0.5)*u/8)*cos(pi*(j+0.5)*v/8)
#print(m4)
for i in range(8):
for j in range(8):
m4[i][j]+=128.5
m4[i][j] = int(m4[i][j])
if m4[i][j] > 255:
m4[i][j] = 255
if m4[i][j] < 0:
m4[i][j] = 0
if t==0:
for i in range(8):
for j in range(8):
print(m2[i][j],end = ' ')
print()
elif t==1:
for i in range(8):
for j in range(8):
print(m3[i][j],end = ' ')
print()
elif t==2:
for i in range(8):
for j in range(8):
print(m4[i][j],end = ' ')
print()
202309-1 坐标变换(其一)
nm = input().split()
n = int(nm[0])
m = int(nm[1])
change = [0,0]
for i in range(n):
dxdy = input().split()
change[0] += int(dxdy[0])
change[1] += int(dxdy[1])
for i in range(m):
xy = input().split()
print(int(xy[0])+change[0], int(xy[1])+change[1])
202309-2 坐标变换(其二)
这题时间卡的比较死,必须在输入端就建立数组存好[1...k]的伸缩量和旋转角,用的时候再减。
from math import cos, sin, pi
nm = input().split()
n = int(nm[0])
m = int(nm[1])
types = []
ktheta = []
change = [[1,0]]
for i in range(n):
line = input().split()
k = int(line[0])
t = float(line[1])
types.append(k)
ktheta.append(t)
if k==1:
change.append([change[-1][0] * t,change[-1][1]])
else:
change.append([change[-1][0],change[-1][1] + t])
for l in range(m):
ijxy = input().split()
i = int(ijxy[0])
j = int(ijxy[1])
x = int(ijxy[2])
y = int(ijxy[3])
k = change[j][0] / change[i-1][0]
t = change[j][1] - change[i-1][1]
'''
这样会超时
for p in range(i-1,j,1):
if types[p] == 1:
k *= ktheta[p]
if types[p] == 2:
t += ktheta[p]
'''
#print(k,t)
x *= k
y *= k
c = cos(t)
s = sin(t)
x1 = x*c - y*s
y1 = x*s + y*c
x = x1
y = y1
print("{:.4f} {:.4f}".format(x,y))
202309-3 梯度求解
转化成a0x1^a1x2^a2...+b0x1^b1x2^b2...求解
maxint = int((1e+9)+7)
nm = input().split()
n = int(nm[0])
m = int(nm[1])
def makexiang():
global n
a = [1]
for i in range(n):
a.append(0)
return a
def multi(a,b):
global n
c = makexiang()
c[0] = a[0]*b[0] % maxint
for i in range(1,n+1):
c[i] = a[i]+b[i]
return c
line = input().split()
xiang = []
for item in line:
try:
b = int(item)
#print(item,end=" ")
a = makexiang()
a[0] = int(item)
xiang.append([a])
continue
except:
pass
if item[0]=='x':
num = item[1:]
num = int(num)
a = makexiang()
a[num] = 1
xiang.append([a])
elif item[0] == '*':
linshi = []
bem = xiang.pop(-1)
em = xiang.pop(-1)
for a in bem:
for b in em:
linshi.append(multi(a,b))
xiang.append(linshi)
elif item[0] == '+':
bem = xiang.pop(-1)
em = xiang.pop(-1)
xiang.append(em+bem)
elif item[0] == '-':
bem = xiang.pop(-1)
em = xiang.pop(-1)
for a in bem:
a[0] *= -1
xiang.append(em+bem)
#print(xiang)
for l in range(m):
line = input().split()
dx = int(line[0])
xlist = [int(i) for i in line[1:]]
s = 0
for p in xiang[0]:
sp = p[0]
#print(sp,end=' ')
for shu in range(1,n+1):
if shu == dx:
if p[shu]==0:
sp = 0
continue
sp *= p[shu]
sp *= (xlist[shu-1]**(p[shu]-1))
#print(xlist[shu-1],(p[shu]-1),sp,end = ' ')
sp %= maxint
else:
sp *= (xlist[shu-1]**(p[shu]))
#print(xlist[shu-1],(p[shu]),sp,end = ' ')
sp %= maxint
s += sp
s %= maxint
#print(sp)
print(s)