CSP-VP37th
目录
1.数值积分
2.机器人饲养指南
3.模板展开
4.集体锻炼
5.收费标准评估
掐指算来好像有两个星期没算法了,之前忙于无聊的考试周和记八股,是时候来点有意思的算法题了,正好到时候6.8是38次CSP,OJ一下上一届的
这次OJ有几道题T了,但是网上找不到题解资源,官方题解好像在它们卖的书里面,哎光顾着圈钱了(说实话自青鱼老师的遭遇就让我抱有不太好感
1.数值积分
TUOJ
模拟题
b,c,l,r=map(int,input().split())def f(x):return x**2+b*x+cimport mathl=math.ceil(l)if l%2:l+=1summ=0for i in range(l,r+1,2):summ+=f(i)print(summ*2)
2.机器人饲养指南
TUOJ
动态规划-完全背包问题
n,m=map(int,input().split())a=list(map(int,input().split()))
'''
f=a.copy()
for i in range(m+1,n+1):ma=0for j in range(1,i//2+1):#分割思路错误:这样就必须是分两段if j>=n:breakma=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=iw=a[i-1]Cpack(F,c,w)print(F[-1])
3.模板展开
TUOJ
太久没用都忘记 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]]=stelif 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]]=stelse:#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 mathsu=0
MOD=998244353for i in range(n):gc = a[i]su = (su + (i+1) * (i+1) % MOD * gc % MOD) % MODfor j in range(i+1, n):gc = math.gcd(gc, a[j])su = (su + (i+1) * (j+1) % MOD * gc % MOD) % MODprint(su)
5.收费标准评估
图论