目录
2018-母牛的故事
动态规划
2020-绝对值排序
1.插入排序/冒泡排序
2.双指针
2021-发工资咯
贪心:每次选择最大面值,扣到0时的cnt即为发放该工资所需最小数量
2022-海选女主角
遍历二维数组
2023-求平均值
二维数组的基本使用
2024-C语言合法标识符
合法标识符定义
2025-查找最大元素
主要是解决字符串输入问题
2028-最小公倍数(最大公约数变体)
a和b的最小公倍数:a * b / gcd(a,b)
2030-汉字统计
清楚汉字编码的特点:汉字码是小于0。并且一个汉字占两个字节(每一个字节均小于0)。
2031-进制转换
进制转换模版
2034-人见人爱A-B
set容器的应用
2036-改革春风吹满地
2037-今年暑假不AC
2040-亲和数
数学:公约数问题
2041-超级楼梯
递推题
2044-小蜜蜂
递推题
2045-RPG难题
递推题
2046-骨骼铺方格
递推题
2047-EOF
递归题
2051-进制转换
十进制转二进制
2057-A+B again
笨比做法:转十进制再转十六进制
2064-汉诺塔3
递推式,把前n-1层看成一个整体移动,故f[n] = 3 * f[n-1] + 2;
2066-一个人的旅行
Dijkstra:这里可以把人看做0号顶点,到相邻城市的距离为0
2067-小兔的棋盘
二维数组的递推式(二维超级楼梯):要使得路径最小,每次仅往右或往下(好兔不走回头路)
2072-单词数
利用set数据不重复的特性。注意:要考虑多个空格的边界条件
2074-叠框
每次以上一行为基准翻转数组,然后对称输出
2076-夹角计算1
推导数学公式
2077-汉诺塔4
递推式:先求出到相邻杆子的最小移动次数
2079-选课时间
DFS排列组合(去重+剪枝)
2080-夹角计算2
atan求角度,注意对 正负四象限 两种情况区分讨论,本题以x正方向为基准
2081-手机短号
水题,字符串输出
2082-找单词
多重背包问题,注意:边界条件是f[i][0] = 1;
2083-简易版最短距离
贪心:站在中间(左右房子数量相同),每次路程即为两端点最短距离(双指针)
2084 -数塔
最大值DP问题
2085-核反应堆
观察规律,找到公式即可
2087-剪花布条
本题数据量小,可直接枚举n²,若数据量大,考虑KMP
2089-不要62
把数字转为字符串,并判断是否符合题意
2091-空三角形
观察位置规律,写出公式即可
2093-考试排名
结构体/输入/输出/重载比较运算
2092-整数解
数学问题
2094-产生冠军
输入样例等价为一个有向图,当仅有一个结点入度为0时,产生冠军
2095-find presen
map容器的应用
2097-Sky数
进制转换问题
2099-整数的尾除
分析规律:补上 余数与除数的差额 ,即可得到当前最小可被整除的数
动态规划
第N年的母牛个数等于前一年的母牛数+四年前的母牛数
1.插入排序/冒泡排序
每插入一个数据,不断向前调整到合适的位置
2.双指针
i指向对头,j指向队尾,每次输出较大的数。
贪心:每次选择最大面值,扣到0时的cnt即为发放该工资所需最小数量
遍历二维数组
二维数组的基本使用
这里强调字符串输入格式
scanf("%d%",&n); getchar(); //等价于scanf("%d%*c",&n); 缓冲区为 3 二者都是拿走 %*c 的标准用法是什么。它的意义何在? 我所知道的是它经常出现在例如 cscanf("%s%*c",&a);语句中。
合法标识符定义
主要是解决字符串输入问题
关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
原文链接:gets函数,C语言gets函数详解_gets()的功能-CSDN博客
a和b的最小公倍数:
故三个数的最小公倍数:先求前两个的最小公倍数c,再拿c和第三个数求最小公倍数。n个以此类推。
清楚汉字编码的特点:汉字码是小于0。并且一个汉字占两个字节(每一个字节均小于0)。
注意:getline(cin,s)对应头文件#include<string>
进制转换模版
set容器的应用
数学:公约数问题
递推题
由题目可知,每次只能走一级或两级。 因此从第一级走上第二级只能走一步,只有1种走法。 从第一级走上第三级,可以从第一级直接走两步,也可以从第二级走一步。有2种走法 走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。 即: f(2) = 1 f(3) = 2 f(n) = f(n-1) + f(n-2) (n > 3) 是一个斐波那契函数。
递推题
其中从3到6等价于从1到4
递推题
其实这道题的解法就是站在涂色后的最后一块,思考前一块是怎么涂色的就可以了,比如 如果最后一块的前一块是与第一块颜色不同的情况,则最后一块只有一种颜色可以涂,其方法的数目等于f(n-1),而当最后一块前面一块的颜色与第一块相同时,则倒数第三块一定与第一块的颜色不同,则涂到倒数第三块有f(n-2)方法,到倒数第二块有f(n-2)种方法,最后一块则有 f(n-2)2种方法,由此可以的出递推的关系式 f(n)=f(n-1)+2 * f(n-2); 题目中给出的范围不大,可以先采取打表的方法给出所有的结果,再输出即可。
递推题
从图中也可以观察出来,第N张牌的排列可以又N-1张牌的排列再在末尾加上一张竖的牌。这样依然合法。 也可以在N-2张合法排列的牌后面加上两张横着放的牌(如果竖着放就和上面一种重复了)。
所以f(n) = f(n-1) + f(n-2) 即又是一个斐波那契数列。
递归题
分为两种情况 当第n个是“O”时,依据限制条件,那么第n-1个不能为“O”,那n-1不为“O”就有两种情况了,即为“E”或者“F”,所以这种情况有f(n-2)2个 当第n个不为“O”时,与第一步相同,也有两种情况,即为“E”或者“F”,所以这种情况有f(n-1)2个. 递推公式:f(n)=f(n-2) * 2+f(n-1) * 2
原文链接:杭电ACM 2047 - 阿牛的EOF牛肉串(解题思路与详细分析)_阿牛的牛肉串题解-CSDN博客
十进制转二进制
模版题
笨比做法:转十进制再转十六进制
递推式,把前n-1层看成一个整体移动,故f[n] = 3 * f[n-1] + 2;
Dijkstra:这里可以把人看做0号顶点,到相邻城市的距离为0
二维数组的递推式(二维超级楼梯):要使得路径最小,每次仅往右或往下(好兔不走回头路)
利用set数据不重复的特性。注意:要考虑多个空格的边界条件
每次以上一行为基准翻转数组,然后对称输出
推导数学公式
递推式:先求出到相邻杆子的最小移动次数
DFS排列组合(去重+剪枝)
atan求角度,注意对 正负四象限 两种情况区分讨论,本题以x正方向为基准
水题,字符串输出
多重背包问题,注意:边界条件是
f[i][j]表示前i个字母组成价值为j的最大单词数量
j = 0 时,意味着只有一种情况
可以优化为滚动数组
贪心:站在中间(左右房子数量相同),每次路程即为两端点最短距离(双指针)
最大值DP问题
自上而下,保存每一个结点的路径最大值
观察规律,找到公式即可
本题数据量小,可直接枚举n²,若数据量大,考虑KMP
把数字转为字符串,并判断是否符合题意
观察位置规律,写出公式即可
结构体/输入/输出/重载比较运算
数学问题
化简得:xx - nx + m == 0 ,开口向上的抛物线,从对称轴往右侧遍历直到左式不小于0,判断其中是否有整数解