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))

写在最后

相关推荐
fie88899 小时前
NSCT(非下采样轮廓波变换)的分解和重建程序
算法
晨晖29 小时前
单链表逆转,c语言
c语言·数据结构·算法
im_AMBER11 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
鼾声鼾语11 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
LYFlied11 小时前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
Swizard12 小时前
别再迷信“准确率”了!一文读懂 AI 图像分割的黄金标尺 —— Dice 系数
python·算法·训练
s090713612 小时前
紧凑型3D成像声纳实现路径
算法·3d·声呐·前视多波束
可爱的小小小狼12 小时前
算法:二叉树遍历
算法
d111111111d13 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
AI科技星13 小时前
质量定义方程常数k = 4π m_p的来源、推导与意义
服务器·数据结构·人工智能·科技·算法·机器学习·生活