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+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.机器人饲养指南

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=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.模板展开

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]]=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.收费标准评估

图论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值