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

写在最后

相关推荐
吞下星星的少年·-·36 分钟前
Div.3 CF 1131A题(排序,模拟)
算法·模拟·排序
aichitang20241 小时前
代数拓扑学与现代前沿视角
考研·算法·数学建模·ai·拓扑学·高考
二本咕咕-机械转码1 小时前
FreeRTOS深入解析(一)_链表与并发保护——哨兵循环链表、排序键游标、临界区与关调度
单片机·算法·链表
-银雾鸢尾-2 小时前
两数之和-C++实现
c++·算法
j7~2 小时前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法
倍利福猎头公司官方账号2 小时前
大企业HR如何向猎头公司清晰传达AI岗位的技术需求?
人工智能·算法·机器人·求职招聘·业界资讯
揽星河..2 小时前
【C++】类和对象
c++·算法
D e re k ZH3 小时前
C++ 并发、未定义行为与工程化难点(No 3)
数据结构·c++·算法·面试
释厄6234 小时前
同性线套娃律——圆面积必然=1+2+...+n 的求和·圆心不与 π 相关
java·人工智能·算法·1024程序员节
暴力求解4 小时前
C++ ---继承(二)
开发语言·c++·算法