2025第四届大学生算法挑战赛 赛前测试赛 题解

前言


题解

测试考场【算法编程赛道】2025第四届大学生算法挑战赛

继续用Deepseek进行求解,还是非常丝滑。


A. 追债之旅

思路: 图论 + bfs题

利用deepseek,直接给出答案

感觉deepseek在输入输出上,显得有些啰嗦。

python3 复制代码
# coding=utf-8
import heapq

def solve():
    import sys
    input = sys.stdin.read
    data = input().split()
    idx = 0
    n = int(data[idx])
    idx += 1
    m = int(data[idx])
    idx += 1
    k = int(data[idx])
    idx += 1
    
    adj = [[] for _ in range(n + 1)]
    for _ in range(m):
        u = int(data[idx])
        idx += 1
        v = int(data[idx])
        idx += 1
        w = int(data[idx])
        idx += 1
        adj[u].append((v, w))
        adj[v].append((u, w))
    
    a = list(map(int, data[idx:idx + k]))
    idx += k
    
    INF = float('inf')
    dp = [[INF] * (n + 1) for _ in range(k + 1)]
    dp[0][1] = 0
    
    heap = []
    heapq.heappush(heap, (0, 0, 1))  # (total_cost, day, city)
    
    found = False
    min_total = INF
    
    while heap:
        total_cost, day, u = heapq.heappop(heap)
        if u == n:
            min_total = min(min_total, total_cost)
            found = True
            continue
        if day == k:
            continue
        if total_cost > dp[day][u]:
            continue
        for (v, w) in adj[u]:
            new_day = day + 1
            if new_day > k:
                continue
            new_total = total_cost + w + a[day]
            if new_total < dp[new_day][v]:
                dp[new_day][v] = new_total
                heapq.heappush(heap, (new_total, new_day, v))
    
    if found:
        print(min_total)
    else:
        print(-1)

solve()

B. 单词分类

思路: 对每个单词的字母频率进行统计,构建一个feature key

python3 复制代码
# coding=utf-8


n = int(input())

from collections import Counter

st = set()
for _ in range(n):
    s = input()
    cnt = Counter(s)
    z = list(cnt.items())
    z.sort(key=lambda x: (x[0], x[1]))
    k = ""
    for (i, j) in z:
        k += str(i) + ":" + str(j) + ","
    st.add(k)

print (len(st))

C. 梯形面积

S = ( u + d ) ∗ h / 2 S = (u + d) * h / 2 S=(u+d)∗h/2

python3 复制代码
u, d, h = list(map(int, input().split()))

print ("%.3f" % ((u + d)/ 2.0 * h))

D. 好串

等价变化:堆栈模拟, a等价push,b等价于pop

保证栈不存在pop空的操作,同时最后栈为空

python3 复制代码
s = input()

def solve(s):
    r = 0
    for c in s:
        if c == 'a': r+=1
        else:
            r-=1
            if r < 0: return False
    return r == 0


print ("Good" if solve(s) else "Bad")

E. 展览

省流题意: 给你一个数组,任意取几个元素,使得其异或值最大

线性基的板子题

想到了线性基,但代码还是借助deepseek来提供。

python3 复制代码
# coding=utf-8

def insert(x, basis):
    for i in range(63, -1, -1):
        if (x >> i) & 1:
            if basis[i] == 0:
                basis[i] = x
                break
            x ^= basis[i]
    return basis

n = int(input())
arr = list(map(int, input().split()))
basis = [0] * 64

for v in arr:
    insert(v, basis)

def get_max_xor(basis):
    res = 0
    for i in range(63, -1, -1):
        if (res ^ basis[i]) > res:
            res ^= basis[i]
    return res

print (get_max_xor(basis))

写在最后

相关推荐
大胆飞猪1 小时前
递归、剪枝、回溯算法---全排列、子集问题(力扣.46,78)
算法·leetcode·剪枝
Kisorge3 小时前
【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇)
stm32·嵌入式硬件·算法
铭哥的编程日记4 小时前
深入浅出蓝桥杯:算法基础概念与实战应用(二)基础算法(下)
算法·职场和发展·蓝桥杯
Swift社区4 小时前
LeetCode 421 - 数组中两个数的最大异或值
算法·leetcode·职场和发展
cici158744 小时前
基于高光谱成像和偏最小二乘法(PLS)的苹果糖度检测MATLAB实现
算法·matlab·最小二乘法
StarPrayers.5 小时前
自蒸馏学习方法
人工智能·算法·学习方法
大锦终5 小时前
【动规】背包问题
c++·算法·动态规划
智者知已应修善业6 小时前
【c语言蓝桥杯计算卡片题】2023-2-12
c语言·c++·经验分享·笔记·算法·蓝桥杯
hansang_IR6 小时前
【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]
c++·算法·最小生成树
Croa-vo7 小时前
PayPal OA 全流程复盘|题型体验 + 成绩反馈 + 通关经验
数据结构·经验分享·算法·面试·职场和发展