目录
掐指算来好像有两个星期没算法了,之前忙于无聊的考试周和记八股,是时候来点有意思的算法题了,正好到时候6.8是38次CSP,OJ一下上一届的
这次OJ有几道题T了,但是网上找不到题解资源,官方题解好像在它们卖的书里面,哎光顾着圈钱了(说实话自青鱼老师的遭遇就让我抱有不太好感
1.数值积分
模拟题
b,c,l,r=map(int,input().split())
def f(x):
return x**2+b*x+c
import math
l=math.ceil(l)
if l%2:
l+=1
summ=0
for i in range(l,r+1,2):
summ+=f(i)
print(summ*2)
2.机器人饲养指南
动态规划-完全背包问题
n,m=map(int,input().split())
a=list(map(int,input().split()))
'''
f=a.copy()
for i in range(m+1,n+1):
ma=0
for j in range(1,i//2+1):
#分割思路错误:这样就必须是分两段
if j>=n:
break
ma=max(ma,f[j-1]+f[i-j-1])
f.append(ma)
'''
#重新理一下:空间为n固定,要求价值最大:完全背包
F=[0]*(n+1)
def Cpack(F,c,w):
for j in range(c,n+1):
F[j]=max(F[j],F[j-c]+w)
for i in range(1,m+1):#每天喂多少水果,也就是占用的容量
c=i
w=a[i-1]
Cpack(F,c,w)
print(F[-1])
3.模板展开
太久没用都忘记 replace 后要赋值了
直接模拟的话只能过40%后面就T了,有一个小点还是M的
#动态:当组成这个字符串所索引的 $ 对象变的时候也会随着变
T=int(input())
d={}
for _ in range(T):
temp=list(input().split())
if temp[0]=='1':
st=''
for i in range(2,len(temp)):
if temp[i][0]!='$':
st+=temp[i]
else:
if temp[i][1:] in d:
st+=d[temp[i][1:]]
#st=''.join(s for s in temp[2:])
d[temp[1]]=st
elif temp[0]=='2':
st=''
for i in range(2,len(temp)):
if temp[i][0]=='$':
st+=temp[i]+'^'
else:
st+=temp[i]
d[temp[1]]=st
else:
#print(d)
if temp[1] in d:
l=d[temp[1]]
for key in d:
l=l.replace('$'+key+'^',d[key])#太久没用,都忘记replace要赋值了
#print(l)
print(len(l))
else:
print(0)
'''
l='$a^'
l.replace('$'+'a'+'^',d['a'])
print(l)
print('$'+'a'+'^')
'''
感觉主要是因为 3 里面的遍历replace超时了,
通过正则表达式优化了匹配思路,但是还是T
pattern=r"\$.*?\^"
matches=re.findall(pattern,l)
for key in matches:
l=l.replace(key,d[key[1:len(key)-1]])
我感觉是因为用py的原因
但是 g++ 也T了。。
目前还在研究
4.集体锻炼
模拟法后面T了
n=int(input())
a=list(map(int,input().split()))
import math
su=0
MOD=998244353
for i in range(n):
gc = a[i]
su = (su + (i+1) * (i+1) % MOD * gc % MOD) % MOD
for j in range(i+1, n):
gc = math.gcd(gc, a[j])
su = (su + (i+1) * (j+1) % MOD * gc % MOD) % MOD
print(su)
5.收费标准评估
图论