9.5-9.8
这周主要是复习一下…发现很多东西都不记得了orz
递归、分治
主要写了点板子题目 典型的逆序对 归并排序代码改的
1 |
|
其实好像感觉之前也写过…sort过的 记一个快读板子(卡了好几次在这)
1 | inline int read(){ |
兔子的逆序对
大量读入需要快读板子 因为反转操作实际是将逆序对变成正序对 正序对变成逆序对 因为每交换一次就改变一次逆序对对数的奇偶性 所以只关注交换的次数就可以了
1 |
|
快排板子 求第k大的数字
1 |
|
一些递归的水题
更相减损术
实际上就是欧拉公式 遥远的数论记忆、、、
gcd(a,b)=gcd(a,a%b)/gcd(a,a-b) 证明很简单
1 | int gcd(int a,int b) |
汉诺塔问题
嗯…感觉也是个规律问题 求解的时候牵涉了一点点高中数列的求通项
由A->C:
(1)以C盘为中介,从A杆将1至n-1号盘移至B杆;
(2)将A杆中剩下的第n号盘移至C杆;
(3)以A杆为中介;从B杆将1至n-1号盘移至C杆。
f(n)=2*f(n-1)+1;
1 | void hanoi(int n, char a, char b, char c) |
有的题目会有一些附加条件 要自己重新算一下 感觉主要是求通项的问题 写代码直接写结论就可以了
other
还有一些很简单的递归就不写了 一直觉得递归很难理解、、、说是将递归当成一把钥匙开一把锁然后一直到最里面那把钥匙() 主要是思想问题 很需要理解(笨人落泪)
补了几道cf
我有罪 我没及时补题 想起来有一些比赛的时候没写出来的C
Color the Picture
一个贪心问题 就是要保证颜色一定能涂相连的两行/两行以上 不能出现只有一行剩下的情况
1 |
|
o 还wa了一发在long long上
Doremy’s IQ
觉得逆向思维的话更好理解 也更好写代码一些
也是贪心 就尽量让使q变小的排在后面 逆序遍历 从0开始 后面的都要 直到q等于题目给的q 不满足条件的就不要了
1 |
|
Digital Logarithm
这题比赛的时候debug半小时、、无语住了 代码基本功太差了、、
思路大概就是先去重 然后求位数 再统计一下各个位数 然后求差值 去重不会写 sls教的
1 |
|
写在最后
嗯…效率比预计得低很多 下周继续做递归分治 板子写的还不够熟T T