第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛--算法题科普
前言
全球校园人工智能算法精英大赛”是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰专项赛是新赛道,2024年是其第一届比赛。
之前有粉丝问我,有没有以往的真题,因此这边做个大致的总结。
这边主要以2025年第一赛季(已结束)出现的真题,做一个小小的科普(也许未来会变动,这个以2024~2025年度为准)。
概述
以官方描述为准
AIC·算法巅峰赛赛题及竞赛规则
支持c/c++/java/python语言
题目源自各大OJ(早期题照搬leetcode),然后经过本土化改编(加上巅峰赛背景),大部分数据偏弱,个别题数据存在严重问题。
题型偏典题+思维题,注重基础/数学,AI大模型能基本秒杀。
题目详解
1. 示例题(1题,分值0分,时限45分)
这题主要是为同学,能尽快熟悉OJ环境,专门设的一道热身题。
题意:
输入一行字符串,然后输出该字符串
- 复制代码到提交框
- 选择好语言
- 提交
- 查看结果
代码
print (input())
2. 测试算法题(1题,分值20分,时限20分)
考察基本的IO操作+基础语法(循环语句等)
题意:
输入整数n,输出"Hi,AiC!"字符串的n倍字符串
代码
n = int(input())
print ("Hi,AiC!" * n)
3. 基础算法题(2题,分值100分,时限45分)
考察基础算法+简单的数据结构
举例2道真题(2025年第一赛季)
A. 搜索插入位子
给定一个已排序的数组,新加入一个数k,需要保序,输出插入的位置(0-index)输入
[1, 2, 4, 5] 3
输出
2
思路分析:
这题很基础的二分搜索题,但是输入格式非常规(早期题录题人员的不专业),放在这里给读者亿点点惊喜。
代码
# 通过eval函数简化输入处理
s = input().replace(']', '],')
arr, k = eval(s)# 利用bisect来快速二分检索
from bisect import bisect_left
ans = bisect_left(arr, k)
print (ans)
B. 斐波那契数列
定义斐波那契数列
f(0)=0,
f(1)=1,
f(2)=1,
f(3)=2,
...,
f(n) = f(n - 2) + f(n - 1)
求第k项对应的值输入
6
输出
8
思路分析:
这题没有指定k的范围,如果k很大,就需要幂矩阵优化,同时斐波那契数增长很快,需要大数
但是这题,简单线性递推即可
n = int(input())
f0 = f1 = 1
for _ in range(2, n):f0, f1 = f1, f1 + f0
print(f1)
实际上,你写成递归(非记忆化),这题也能满分(时间复杂度为O(2n)O(2^n)O(2n), 递归栈为n),可见数据之弱
def dfs(n):if n == 0: return 0if 1 <= n <= 2: return 1return dfs(n - 1) + dfs(n - 2)n = int(input())
print (dfs(n))
4. 进阶算法题(2题,分值100分,时限90分)
考察高阶的算法题,不涉及竞赛题纲
更倾向于基础算法类的典题+思维题(众生平等题)
举例2道真题(2025年第一赛季)
A. 巅峰教授的货币系统
给定n种不同价值的币,求构建价值为m的方案数输入
3 5
1 2 3
输出
5方案如下:
1+1+1+1+1=5
1+1+1+2=5
1+2+2=5
1+1+3=5
2+3=5
思路分析:
经典的完全背包问题, 时间复杂度O(n∗m)O(n*m)O(n∗m)
n, v = list(map(int, input().split()))
coins = list(map(int, input().split()))dp = [0] * (v + 1)
dp[0] = 1for coin in coins:for i in range(coin, v + 1):dp[i] += dp[i - coin]print(dp[-1])
B. 巅峰监控点
给定n个区间[a_i, b_i], 需要最少的监控点,这些监控点能覆盖所有的区间?输入
3
1 2
1 6
3 4输出
2
思路分析:
区间按右侧端点排序,然后贪心即可,保证结果不会变差,即局部最优和全局最优重合
def solve():n = int(input())ps = []for i in range(n):l, r = list(map(int, input().split()))ps.append((l, r))ps.sort(key=lambda x: x[1])cnt = 0last_end = -10**9for i in range(n):start, end = ps[i]if start > last_end:last_end = endcnt += 1print (cnt)t = int(input())
for _ in range(t):solve()
当然进阶题,题型很多
- 复杂的模拟题(谁遇到,谁倒霉)
- 数学题,组合排列等
- 贪心思维题(比较排序,类哈夫曼编码合并,甚至反悔堆)
- DP典题(背包dp,线性dp,区间dp)
- 找规律题(需要学会打表)
相比较而言,图论题基本看不到
5. 优化题(1题,分值待定,时限待定)
其他章节讲述
潜在的问题
前五题可以任选一个时间做,因此它的策略就是随机从题库中抽取。
目前评估下来的几个问题
- 存在错题,即题目描述和测试Case矛盾
- 存在错解,即算法正确,单个别case就是过不了
- 语言不友好,部分题python时限不公平,部分题甚至过不了
- 难度分布波动大,抽题看命
录题的工作人员,感觉专业程度不太高
如何准备
- 推荐牛客/力扣平台,刷一些基础的典题(ACM模式)。
- 提交次数有限,需要学会数据对拍等技巧,提高单次AC率。