2023蓝桥杯大学A组C++国赛游记+个人题解

Day0

发烧了一晚上没睡着,感觉鼻子被打火机烧烤一样难受,心情烦躁

早上6点起来吃了个早饭,思考能力完全丧失了,开始看此花亭奇谭

看了六集,准备复习数据结构考试,然后秒睡

一睁眼就是下午2点了

挂了个毛概课串讲,点了个外卖,吃完又睡着了

醒来就晚上8点了

然后又点了个外卖,复习了三章数据结构

就凌晨2点了,睡觉

Day1

7:40醒,被催着上了车,精神恍惚

然后开始考试

第一题

第一题就被难到了

分割圆形,以为是卡特兰数,但又觉得不一样

不给样例,题意也不是很清楚啊。。。

随便推了推

首先,连接相邻两个点的边(外圈)肯定得单独拿出来考虑,也就是2^n种外圈情况

然后设f[n]表示n边形内部划线不相交的方案数

简单推推得到f[n]=2*f[n-1]+Σf[i+1]*f[n-i+1]

f[3]=1;f[4]=3;.........

也不知道对不对,反正这么写了

最后好像是1392(可能是错的)

第二题

求2^(3^(4^(……^2023)))%2023

扩展欧拉定理

没什么好说的,背不到公式了

(翻了翻以前的博客)

 emm……犯了一个扩展欧拉定理的典型错误

没加phi(p)

所以答案好像是869?

后面补的代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int x,int y){return !y?x:gcd(y,x%y);}
int phi(int n)
{
	int sum=0;
	for(int i=1;i<n;i++)
		if(gcd(i,n)==1)
			sum++;
	return sum;
}
int ksm(int x,int y,int m)
{
	int ret=1;
	while(y){
		if(y&1)ret=1ll*ret*x%m;
		x=1ll*x*x%m;y>>=1;
	}
	return ret;
}
int minksm(int x,int y,int m)
{
	int ret=1;
	while(y){
		if(y&1)ret=min(1ll*ret*x,1ll*m);
		x=min(1ll*x*x,1ll*m);y>>=1;
	}
	return ret;
}
const int mod=2023;
pair<int,bool> f(int n,int m)
{
	if(m==1)return pair(1,1);
	pair<int,int> p=f(n+1,phi(m));
	int b=p.first;
	if(p.second) b+=phi(m);
	printf("%d^%d\n",n,b);
	if(minksm(n,b,m)==m)
		return pair(ksm(n,b,m),1);
	return pair(ksm(n,b,m),0);
}
int main()
{
	printf("%d",f(2,2023).first);
}

(所以搞了40分钟填空题是一分没得是吧)

第三题

把长方形分割成小正方形,让小正方形的数量最多

寻找大于2的最小公因数(没错是最小)

然后直接除一除就结束了

第四题

给出L,R

求x+y=z算式的数目(L<=x,y,z<=R)

数学题,稍微推一推就好

这题极度阴间,小心爆你的longlong(针对某些特定的写法)

第五题

第K小的和

给两个数组A,B。

从A、B中各选一个数加起来,组成C数组,求C数组中第K小的数。

二分答案+two-pointers,注意边界条件的验证

第六题

相连的边

给出一棵带权树,选择相连的三条边,让他们的边权和最大。

首先这三条边只可能是一条链,或者是菊花图

菊花图直接对每个点的相连的边排序

把树定根后,链的情况分两种,一种是直链,一种是有LCA的链

直链的情况直接枚举每个点,向上走三步统计边权

有LCA的情况,其实是两种直链的情况加起来,一边直链长度是2,另一边是1

枚举长度为2的直链,即枚举每个点向上走两步,然后在爷爷节点选择除去走上来的边的最大邻接边即可

注意细节处理。

第七题

01游戏

题目保证有解

直接爆搜

剪枝很多,横竖相连三个不能相同,每行的01个数不超过一半,算完每行每列用二进制val值去重

从11点10写到11点40

最后时间10*10的全下划线不到0.5s

第八题

求一个字符串中长度为i的本质不同的子串的个数(i=1~n)

应该是SAM板题,可惜我背不到了,老了啊┭┮﹏┭┮

写了个双哈希n^2logn,能过4000都顶天了

第九题

求一棵树中距离为i的简单路径条数(i=L~R)

点分治板题,可惜我背不到了,老了老了

暴力n^2走人,居然还有40%

md,lqb出题这么这个样子???尽是出板题是吧???欺负我退役多年的老同志

第十题

本来只剩20分钟了,想着暴力也不是很好写,于是想了想正解,发现正解不难

状压DP,SPFA型转移

f[u][S][hp]表示当前在点u,存在怪兽的点的状态为S,当前血量为hp

很显然

(u,v)存在时:

if(S&(1<<v))

        f[v][S-(1<<v)][hp-cal(S,v)]=min(f[u][S][hp]+w(u,v))

else

        f[v][S][hp]=min(f[u][S][hp]+w(u,v))

然后就利用SPFA转移

最后答案应该是min(f[n-1][……][1~HP])

最后没写完,哪怕前面填空题不做也好啊,最后留个10~20分钟就搞定了,太菜了

总结

总之就是非常菜,简单题背不到公式,板题背不到板子,题目都写不完,太菜了。

<think>好的,我需要回答用户关于蓝桥杯BPython知识点整理和备考指南的问题。首先,我要回顾用户提供的系统级指令,确保格式正确,比如行内数学表达式用$...$,独立公式用$$...$$,并且正确引用提供的参考资料。 用户提到了三个引用,其中引用[1]提到系统性准备包括Python技能、算法知识、解题策略和实战经验,引用[2]关于Python基础语法和编程能力,引用[3]可能涉及环境配置和工具使用。需要将这些内容整合到回答中,同时在末尾生成相关问题。 接下来,我需要整理蓝桥杯BPython的主要考点。根据经验,通常包括基础语法、数据结构、算法数学知识等。需要分模块详细说明每个部分的具体内容,例如基础语法中的数据类型、控制结构,数据结构中的列表、字典、树结构,算法中的排序、递归、动态规划等。同时,数学方面可能会涉及排列合、模运算、质因数分解等,这些需要以LaTeX格式呈现数学公式,如排列数公式$A_n^k = \frac{n!}{(n-k)!}$。 备考策略方面,引用[1]提到了定期回顾、持续刷题和调整策略,因此需要建议制定计划、刷题方法、实战模拟和总结错题。同时,引用[2]提到的环境配置和工具使用(如VsCode)也需要包含在环境准备部分。 在编写过程中,要确保每个部分结构清晰,使用标题和子标题,代码块用正确的语法高亮。例如,动态规划示例代码需要正确缩进和语法。同时,数学公式要正确使用$和$$,比如独立公式如欧拉定理需要用$$...$$包裹。 最后,生成的相关问题需要与内容相关,可能涉及具体算法应用、优化方法、备考误区等,确保问题覆盖回答中的各个部分,帮助用户进一步学习。 检查是否所有引用都正确标注,比如引用[1]在备考策略部分,引用[2]在环境准备部分。确保没有格式错误,如代码块使用三个反引号加语言标识,数学公式正确无误。完成后通读一遍,确保逻辑连贯,符合用户要求的中文回答。</think># 蓝桥杯BPython知识点整理与备考指南 ## 一、核心知识点模块 ### 1. Python基础语法 - **数据类型与运算** 重点掌握整数/浮点数精度处理(如$10^9+7$模运算)、字符串切片($s[::-1]$反转)、布尔运算短路特性 - **数据结构操作** ```python # 列表推导式示例 matrix = [[i*j for j in range(5)] for i in range(3)] ``` - **函数与模块** 熟练使用`itertools`(排列合)、`collections`(Counter统计频率)、`math`(gcd/lcm计算) ### 2. 算法与数据结构 #### 基础算法 - **排序算法** 快速排序时间复杂度$O(n \log n)$,需掌握三数取中优化 ```python def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr)//2] return quick_sort([x for x in arr if x < pivot]) + \ [x for x in arr if x == pivot] + \ quick_sort([x for x in arr if x > pivot]) ``` - **查找算法** 二分查找边界处理需注意,如查找第一个大于等于target的位置 #### 进阶算法 - **动态规划** 背包问题状态转移方程: $$dp[i][j] = \max(dp[i-1][j], dp[i-1][j-w_i] + v_i)$$ 典型例题:最长递增子序列、编辑距离 - **图论算法** Dijkstra算法时间复杂度$O((V+E)\log V)$,需使用优先队列实现 ### 3. 数学基础 - **数论基础** 欧拉定理:当$a$与$n$互质时 $$a^{\phi(n)} \equiv 1 \pmod{n}$$ - **数学** 排列数公式: $$A_n^k = \frac{n!}{(n-k)!}$$ 容斥原理应用场景:集合交并计算 ## 二、备考策略(引用[1]) 1. **三阶段计划** - 基础期(2个月):完成《算法图解》+ 洛谷入门100题 - 强化期(1个月):LeetCode周模拟 + 真题专项突破 - 冲刺期(2周):每日限时模拟考 + 错题本复习 2. **刷题方法论** - 建立题型分类索引表(如DFS回溯、前缀和等) - 使用GitHub管理代码模板库(参考引用[3]的仓库管理方法) 3. **环境准备** 配置VS Code竞模板(引用[3]),包含: ```json { "code-runner.executorMap": { "python": "python3 -u $fileName" }, "editor.quickSuggestions": true } ``` ## 三、高频考点与真题分析 | 考点类型 | 出现频率 | 典型例题 | 解题要点 | |----------------|----------|----------------------------|------------------------------| | 贪心算法 | ★★★★☆ | 区间调度、加油站问题 | 局部最优证明 | | 树状数 | ★★★☆☆ | 逆序对统计 | lowbit操作实现 | | 状态压缩DP | ★★☆☆☆ | 旅行商问题(TSP) | 位运算表示状态 | | 数论推理 | ★★★★☆ | 模指数运算、同余方程 | 快速幂算法实现 | ## 四、常见误区预警 1. **内存超限** 避免创建$O(n^2)$空间复杂度的二维数(如n=1e5时) 2. **Python特性陷阱** ```python # 错误示例:列表重复引用 arr = [[]] * 3 # 三个子列表共享内存 # 正确写法 arr = [[] for _ in range(3)] ``` 3. **输入输出优化** 大数据量时使用`sys.stdin.readline()` ## 五、资源推荐 1. **官方资源** 蓝桥杯ACM训练系统(历年真题库) 2. **GitHub项目** [fun-rec](https://github.com/datawhalechina/fun-rec)中的算法实现(引用[3]) 3. **专项训练** Codeforces Div2 C题难度精选
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值