ACM 3-20笔记
3部排序
- 左指针,右指针, 探路指针–>链表的pq
马虎的算式
- 枚举(五重循环,注意条件)
- 内存1000ms大约运行10^8的指令
大数除法
- 减法
- 除法
39级阶梯
- 斐波那契
- 简化模型后再加上考虑条件
错误票据
-
获得一行内容:getline()前要用getchar()吃掉换行符
-
分割一行以空格分隔的元素
-
1
2
3
4
5string s;
getline(cin,s);
stringstream ss(s);
string tmp;
while( getline(ss,tmp," ") )
-
▲翻硬币
ACM 3-21笔记 (2014年)
奇怪的分式
- gcd辗转相除法
- 枚举
蚂蚁感冒
- 日本白书的蚂蚁模型:穿过身体
▲地宫取宝
- 深搜
- 递归
- 取模
面对&优化思考方向:
- 贪心 : 知道有一条最好的路 —X---> 这题要求每种情况都遍历
- 重复子问题 : 记忆化搜索
dfs(int x, int y , int max,int cnt)
,虽然x,y都是不同的,但max,cnt可能会有相同的值,这些情况是重复的- 动态规划 (递推方式):
ACM 3-22笔记 (2015)
T5-全排列
- DFS框架
- 递归
- 回溯
T7-牌型种数
- 排列组合
- 一般都是用递归解决
- 回溯(恢复初始状态):袋子理论 --> 每次都得把自己的袋子清空再返回
- 两种思路:
- 13次选牌()
- 每张牌选几次(更简单)
T9-垒骰子
- 递归
- 分治法
- 逐步生成
ACM 3-23 (2016)
- 凑数字
- 多个不同的数字---->全排列问题
附录:通用的代码工具
void i2s(string &s, int &num)
1 | void i2s(string &s, int &num){ |
string去前置0
1 | void removePre0(string &s){ |
string回溯去最后一个元素
1 | path += pai[i]; |
求最大公因数(辗转相除法):
1 | int gcd(int a,int b){ |
全排列
next_premutation
1 |
|
如果有sort(),输出为
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
若无,则输出为
1 0 2
1 2 0
2 0 1
2 1 0
可以发现少了许多种组合方法。
不过,仔细比较各种组合方法和有无sort()
的输出,可以发现函数next_permutation()
是按照字典序产生排列的,并且是从数组中当前的字典序开始依次增大直至到最大字典序。
△.sort()
默认排序从小到大
DFS+回溯法
1 |
|
C++输入输出流设置
1 |
|
C语言里的输入输出问题
1 | int d, |
scanf:
使用 scanf 输入 42
- scanf()中使用%c说明符,该函数将只读取字符4 并将其存储在一个char类型的变量中
- 如果使用%s说明符,该函数会读取两个字符,即字符4和字符2,并将它们存储在一个字符串中。
- 如果使用%d说明符,则scanf 读取同样的两个字符,但是随后它会继续计算与它们的相应的整数值为4*10+2 得到 42;然后将该整数的二进制表示保存在一个int变量中,
- 如果使用%f说明符 则scanf()读取这两个字符 计算它们对应的数值 42,然后以内部的浮点表述该值,并将结果保存在一个float变量中
1 | /** |
getchar():
getchar()只能输入字符型,输入时遇到回车键才从缓冲区依次提取字符.
说明:当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。
分割输入
1 | /* |
循环移位运算
1 |
|
宏定义循环
1 |
|
Author: Mrli
Link: https://nymrli.top/2019/03/28/蓝桥杯突击训练/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.