【赛后Python解】第五届“传智杯”全国大学生计算机大赛(初赛B组)

P8869 [传智杯 #5 初赛] A-莲子的软件工程学

a,b=map(int,input().split())
def sgn(b):
    if b>0:
        return 1
    else:
        return -1
print(sgn(b)*abs(a))

P8870 [传智杯 #5 初赛] B-莲子的机械动力学

n,m=map(int,input().split())
num1=list(map(int,input().split()))
num2=list(map(int,input().split()))
num1=num1[::-1]
num2=num2[::-1]
# print(num1)
# print(num2)

if n>m:
    lenss =n
    lens=n-m
    for i in range(lens):
        num2.append(0)
elif n<m:
    lenss=m
    lens =m-n
    for i in range(lens):
        num1.append(0)
else:
    lenss=n
# print(num1)
# print(num2)
num3=[0]*(lenss+1)
for i in range(lenss):
    num3[i]+=num1[i]+num2[i]
    cnt=i+2
    #print(cnt)
    # print(num3[i],cnt)
    if num3[i]>=cnt:
        ncnt=num3[i]//cnt
        num3[i]=num3[i]%(cnt)
        num3[i+1]+=ncnt
if num3[-1]==0:
    num4=num3[:len(num3)-1]
    print(*num4[::-1])
else:
    print(*num3[::-1])

P8872 [传智杯 #5 初赛] D-莲子的物理热力学

解析:贪心题,先从小到大排序,然后利用枚举从右(i=0)开始变化,从左(j=0)开始变化,每一步的变化操作都做完后取极值,然后再与之前的比较,得出最小的极值。

读者可能会不明白为什么从右来一遍,还要从左再来一遍,因为从右开始时,j的取值为x,也就是m

n,m=map(int,input().split())
a=list(map(int,input().split()))
a.sort()
if m>=n:
    print(0)
elif m==0:
    print(a[-1]-a[0])
else:
    i=0#左端变化次数
    nummin = float('inf')
    while True:#左端从0开始
        j=m-2*i#右端在减去左端变化过来的最大数后剩余的变化次数
        if j<0:#为负数说明右端最大值无法减小,即右端无法向左移动
            j=0
        num=a[n-j-1]-a[i]#m次操作结束,求出该次操作所得到的极值
        #print(num,i)
        nummin=min(nummin,num)#与之前的比较
        if j<=0:
            break
        i+=1
    j=0#右端变化次数
    while True:#右端从0开始
        i=m-2*j
        if i<0:
            i=0
        num=a[n-j-1]-a[i]
        #print(num,i)
        nummin=min(nummin,num)
        if i<=0:
            break
        j+=1
    print(nummin)

P8873 [传智杯 #5 初赛] E-梅莉的市场经济学

解析:数学题,找规律,像分段函数,然后利用等差数列求和求解就行了。

n=int(input())
def Sn(n):
    return (2*n-1)*n
def an(n):
    return 4*n-3
for i in range(n):
    k=int(input())
    n1=(1 + (1 + 8 * k) ** 0.5) / 4
    n2 = int((1 + (1 + 8 * k) ** 0.5) / 4)#第n段
    if n1-n2==0:
        print(0)
    else:
        ak=k-Sn(n2)#第n段的第ak个
        n3=an(n2+1)#第n段有n3个
        if ak<=(n3+3)//4:
            print(ak-1)
        elif ak<=n3-(n3+3)//4:
            print(n2-(ak-1-(n3+3)//4)-1)
        else:
            print((ak-1-n3+(n3+3)//4-1)-n2+1)
        # print()
        # print(n2)
        # print(n3)
        # print(ak)

P8875 [传智杯 #5 初赛] G-二人的花纹纸游戏

PC:干!用python写超时了。

解析:

n,m=map(int,input().split())
A=[]
for i in range(n):
    list1=list(map(int,input().split()))
    A.append(list1)
r,c=map(int,input().split())
B=[]
for i in range(r):
    list1=list(map(int,input().split()))
    B.append(list1)
q=int(input())
for i in range(q):
    x1,y1,x2,y2=map(int,input().split())
    ans=0
    for i in range(x1-1,x2):
        for j in range(y1-1,y2):
            if B[(i-x1+1)%r][(j-y1+1)%c]!=1:
                #print(A[i][j])
                ans+=A[i][j]%998244353
    print(ans%998244353)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第六届杯B组初赛播客举办的一次IT技术竞赛的初赛阶段,旨在选拔出各高校优秀的程序设计人才。该比赛中,参赛者将面临多道编程题目,通过编写程序决问题来展示他们的技术水平和创新能力。 在初赛中,参赛者需要在规定的时间内完成多道程序设计题目。这些题目可能涉及数据结构、算法、网络通信等方面的知识,要求参赛者具备扎实的编程基础和决实际问题的能力。 参赛者需要在规定的时间内完成编程题目,并提交给评委进行评分。评委会根据答案的正确性、效率、代码的可读性等方面对参赛者的作品进行综合评判。最终,得分高的参赛者将进入下一轮比赛。 第六届杯B组初赛的目的是为了选拔出具备优秀编程能力的学生,为他们提供一个展示才华、学习交流的平台。参赛者不仅可以通过比赛锻炼自己的编程技巧,还可以结识其他优秀的参赛者,相互学习、切磋技艺。 在比赛过程中,参赛者还可以通过与其他选手交流,了各种不同的编程思路和题方法,不断提高自己的编程水平。同时,参赛者还有机会与业界的专家学者进行交流,了最新的技术动态和发展趋势。 总之,第六届杯B组初赛是一次很有意义的编程竞赛,为各大高校的IT人才选拔提供了一次难得的机会。通过比赛,参赛者可以展现自己的才华,提升技术水平,同时也可以与其他优秀选手进行交流,共同进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值