深入浅出程序设计竞赛(基础篇)
一、语言入门
1. 简简单单写程序
2. 顺序结构程序设计
P5705 【深基2.例7】数字反转
scanf("%c%c%c.%c",&a,&b,&c,&d);
P1425 小鱼的游泳时间
把时间转换成距
P5708 【深基2.习2】三角形面积
三角形三边长
3. 分支结构程序设计
例 3-2
运算符优先级:
4. 循环结构程序设计
5. 数组与数据批量存储
P2615 [NOIP2015 提高组] 神奇的幻方
6. 字符串与文件操作
例 6-3
strcpy(s,"hello")
例 6-4
fgets(s,sizeof(s),stdin);
sscanf(s,"%d",&a);
sprintf(s,"%d",a);
例 6-7
char ch[10];
string s;
strcpy(ch,s.c_str()); // strncpy(ch,s.c_str(),10);
s = ch
P1598 垂直柱状图
值得一写
7. 函数与结构体
P1304 哥德巴赫猜想
哥德巴赫猜想:任一大于
的偶数都可以写成两个素数之和
二、初涉算法
8. 模拟与高精度
P1249 最大乘积
高精度的部分不再赘述,只考虑怎么分解
DP
取对数把乘积变成加法就可以用低精度背包得到决策
贪心
首先有
一种构造方法是找到最大的
P1045 [NOIP2003 普及组] 麦森数
解方程
后
9. 排序
P1116 车厢重组
冒泡排序交换相邻项次数
P1012 [NOIP1998 提高组] 拼数
10. 暴力枚举
P2241 统计方形(数据加强版)
矩形的数量为
边长
长方形数量为矩形数量减正方形数量
时间复杂度
P1088 [NOIP2004 普及组] 火星人
next_permutation(begin(),end())
P1217 [USACO1.5] 回文质数 Prime Palindromes
回文数只有
11. 递推与递归
P1044 [NOIP2003 普及组] 栈
卡特兰数
P1028 [NOIP2001 普及组] 数的计算
递归的常数优于递推,因为不需要计算
P1259 黑白棋子的移动
容易从
oo...oo**...**--
oo...o--*...**o*
oo...o***...--o*
从
oooo****--
ooo--***o*
ooo*o**--*
o--*o**oo*
o*o*o*--o*
--o*o*o*o*
P1228 地毯填补问题
公主的存在使得基本图形是缺一个角的正方形
把大正方形均分成四个小正方形,递归填公主所在的小正方形,中间放一个地毯就使剩下三个小正方形也缺了一个角
12. 贪心
经典模型:
- P1223 排队接水
- P1803 凌乱的yyy / 线段覆盖
- P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
- P3817 小A的糖果
- P1106 删数问题
- P5019 [NOIP2018 提高组] 铺设道路
- P1094 [NOIP2007 普及组] 纪念品分组
- P4995 跳跳!
- P1080 [NOIP2012 提高组] 国王游戏
哈夫曼编码
P4447 [AHOI2018初中组] 分组
sol 1
二分答案
check 时从小到大尝试把连续
sol 2
从小到大考虑每个数,每组可以用
对于数
sol 3
13. 二分查找与二分答案
P1163 银行贷款
利率可能
倍增代替二分答案:设置当前答案
和增量 。如果 可行,那么令 ,否则令 。 时结束
14.搜索
数独
P1162 填涂颜色
sol 1
从边界的
sol 2
先按行数从小到大,再按列数从小到大,找到的第一个
三、简单数据结构
15. 线性表
P1449 后缀表达式
后缀表达式/逆波兰式:运算符在参数之后,严格从左到右计算(没有括号,不考虑优先级)
16. 二叉树
P1827 [USACO3.4] 美国血统 American Heritage
- 前序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
前序遍历的第一个位置是根,中序遍历中以根为分界分成左右子树
表达式树
叶子是参数,非叶子是运算符,自底向上用根的运算符合并子树的值就能得到表达式的值
若所有运算都是双目运算,则表达式树是二叉树。前/中/后序遍历是前/中/后缀表达式
P1229 遍历问题
前后序相同而中序不同只有一种情况:只有一个儿子的结点,该儿子位于左/右子树
问题转化为求只有一个儿子的结点数。易证
习题 16-3
P1185 绘制二叉树
设
容易得到需要的坐标/长度,模拟
17. 集合
18. 图的基本应用
P3916 图的遍历
建反图。从
P2661 [NOIP2015 提高组] 信息传递
每个点只有一条出边意味着每个连通块中有且仅有一个环
P1127 词链
P1330 封锁阳光大学
每条边必须且仅能选一个端点,所以任意一条链都是 选-不选-选-不选 交替,有奇环则无解
因此一个连通块的答案是二分图左右部中较小的点数
P1363 幻象迷宫
显然如果当前棋盘和相邻棋盘都能走到 yes
把坐标模
一开始的想法是从 s 能走到环就 yes
。hack:相邻的四个棋盘形成一个环
5 5
#.#.#
..#..
#####
.S#..
#.#.#
正解是记录走到 yes
四、基础数学与数论
19. 位运算与进制转换
负数的二进制
反码:把绝对值的二进制取反
补码:反码
减法:
小数的二进制
逻辑命题
徳·摩根定律:
实现了一定条件下与和或的转化
P1017 [NOIP2000 提高组] 进制转换
被除数
20. 计数原理与排列组合
P1866 编号
限制关系是包含的,从强到弱考虑
P2789 直线交点数
设
bitset
优化,时间复杂度
21. 整除理论
P1414 又是毕业季II
考虑每个值是多少个数的约数
P2651 添加括号III
P2660 zzc 种田
设宽为
结论:每次删边长为
边界是
反证:如果所有正方形边长都
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具