国庆七天乐——第一天
20171001
所学内容:分治倍增,搜索模拟,位运算+考试
【时间复杂度】
表示运行时间的增长趋势
T(N)=T(N/2)+O(1) 二分查找
T(N)=2*T(N/2)+O(1) 线段树的节点个数
T(N)=2*T(N/2)+O(N) 快排/归并排序
T(N)=a*T(N/b)+f(1) è主定理
【位运算】
含义 |
Pascal语言 |
C语言 |
Java |
按位与 |
a and b |
a & b |
a & b |
按位或 |
a or b |
a | b |
a | b |
按位异或 |
a xor b |
a ^ b |
a ^ b |
按位取反 |
not a |
~a |
~a |
左移 |
a shl b |
a << b |
a << b |
带符号右移 |
a shr b |
a >> b |
a >> b |
无符号右移 |
a>>> b |
X&(1<<k) 取k的第k位
(x>>k)&1 第k位是1还是0
Lowbit(x)=x&(-x)
X=x-x&(1<<k) 清除第k位
【递归算法】
1阶乘:f(0)=1
f(i)=f(i-1)*i
2.汉诺塔 h(1)=1;
H(n)=h(n-1)*2+1;
H(n)=2^n-1à方案总数
Void solve(int n,char a,charb,char c)
{
If(n>1) solve(n-1,a,b,c)
Printf(“%c%c\n”,a,b);
If(n>1)solve(n-1,c,b,a)
}
3.不开数组,实现一个字符串的倒序输出
Void haha()
{
Char ch;
If(~scanf(“%c”,&ch); //按位取反,判断是否为-1(11111111)
Haha();
Printf(“%d”,ch)
}
爆栈 :10000层之内
【模拟】
1 统计2出现了几次
I%10,i/=10;
2.接水问题
每次维护最早接完水的人(堆)
谁先接完,就让下一个人到他那里去
3.字符串展开
记录每一个“-”,记录最后变成了什么字符串
【搜索:dfs/bfs】
搜索加速
剪枝:减掉所有不可能出解的废状态
加速:首先走更有可能有解的状态
迭代加深搜索 :用于不知道最优解大小的
一层一层的搜(bdfs)
双端搜索:用于状态数增长过于迅速
起点和终点一块搜
优化状态存储方式:加速状态的拷贝
位运算
- 老鼠走迷宫
走到终点输出,否则枚举四个方向,不越界&&没走过&&没有墙,搜索。
- 八皇后
搜索剪枝,二进制加速(有位运算版的)
- 八数码
Bfs
******** 康托展开:
把排列看成一个数,第i位为N-i+1进制
如果第i位为是ai,且之前有bi个数比他小,那么他在该进制下的值是ai-bi-1
- 带钥匙的迷宫问题;
有钥匙和没有钥匙是两个图
遇到门:如有我之前已经拿到钥匙了,那这扇门就不存在了,否则这扇门就是一堵墙
- mayan游戏
如果颜色不足三个,剪掉
所有的左右交换可视为左边的右移
合理使用算法判断十字形
相同颜色的点用交换
- 斗地主
从大到小搜;先出炸弹,顺子,,尽可能的多出牌,直到最后,三带一,三带二,对子,单张等,可以从最后的状态里扫出来O(N),无需搜索
- 滑雪
Dpi,j表示从(I,j)位置向下滑最远距离,通过搜索转移
************************tips**************************
1对拍,能写对拍的难度都相对较小
2.主要优化措施在写题之前就要想好,这决定了状态的存储格式
3.不要寄希望于优化常数,一定是有明显剪枝没有考虑清楚
4.有良心的出题人一般会把时限开到他能写出的最快程序的时间的两倍
********************调试**************************
- 最好是gdb+vim
- 搜索过程输出
- 使用错误流,assert等
#include<cassert>
assert(level<=n);
- 存状态用struct可能会更容易调试
【分治】
- 猜数游戏 logn
- 跳石头à二分
设x为最小距离最大值,(1-所有数的最大值)
如果某两块石头之间的距离小于x,移走一块石头
如果最后移走的石头总数>m,说明x过小,l=x;
反之 r=x;
- Can you find it
计算出x- ci,并把Ai+Bi的所有可能性的值离线算出来Dz,二分查找这个数.
*************骚操作*******************************
Lower_bound() 第一个大于等于的位置,否则返回end();
Upper_bound() 第一个大于的位置,否则返回end()
- 借教室
二分订单总数,求出教师数量的前缀和,当天剩余教室的数量,判断当天的数量是个满足(<0不满足)
一种奇怪的二分:二分比例为 0.618:1
根据大量科学研究得出,斐波那契数列数的位置越靠后,前一个数和后一个数的比值就更接近黄金比(这是科普)
- 函数极值:三分
讲数据分成三分,(1,2,3)
如果1+2<2+3,就舍去1(或3)
- Rode:三分套三分
写一个cala()函数来计算时间
三分固定起点后三分固定终点,比较得出最短时间
终点(起点(cala()))
7.归并和快排
8. 逆序对:树状数组/在归并排序是计算交换的次数(计数器)
【倍增】
- 快速幂
- 快速乘(把快速幂中的乘号变成加号,而且不能mod)
- Lac (jump[t][x]=jump[t-1][jump[t-1][x]]精华!)
先把两个节点的深度利用jump数组调成一样的(跳2的幂次)
然后两个节点一块跳(从大到小算:2^10à2^9à2^8à…-à2^0.)
用位运算来弄。
如果两个节点跳到一起了,就返回,否则就继续往上跳
最后可以保证,当前他们的父节点就是他们的最近公共祖先
【普通分块】
设分块的长度为s,数组的总长度为n
分块的大小=min(s,n/s),≈sqrt(n)
【大点小点分块】
对于大于sqrt(n)à分块
小于sqrt(n)à普通暴力
**********************task****************************
T1:数论
=2^(n-1);
因为 c(0,n)+c(1,n)+c(2,n)+…..+c(n-1,n)+c(n,n)=2^n;
所以如果只取一半的话,那就是2^n/2=2^(n-1)
T2:模拟
把X,y数组排序,利用相似的性质,表示现线段的长度,再作比较
T3:数据结构
Trie树+合并相同后继节点
转载于:https://www.cnblogs.com/ZDHYXZ/p/7622437.html
国庆七天乐——第一天相关推荐
- 国庆七天乐,要猛! ——经典迷宫问题
目录 前言 思路 一.先创建迷宫 代码演示 输出效果为 二.在方法中使用递归回溯思想解决鼠鼠出迷宫 演示 三.代码 + 结果演示 输出结果 四.更改路线后再次尝试 五.测试回溯现象 总结 前言 迷宫题 ...
- 国庆七天乐,写博也快乐之小程序个人中心精美样式分享(登录、天气功能、天气动态背景变换、iconfont阿里巴巴、个人中心代码演示)
hello,大家国庆快乐~今天是国庆节第三天啦,你有好好学习吗?
- 国庆七天乐 Day5
今天做的是第五届河南省省赛,我挫到爆了,只出了三题,都是水题,个人赛垫底. 先总结一下,今天写最水的A题居然WA了两次,关键是调了半个小时,浪费了不少时间,也影响了心情.然后做的是同样水的 F题,还好 ...
- 国庆七天乐——第三天
2017102 [[动态规划]] [基础内容] 状态设计:往往是观察在搜索过程中需要用到的参数,所表 示的含义往往是"最大"."最小"."方案总数&q ...
- 国庆七天乐 Day7
今天做的是湖南省2010年省赛题,悲催的只出了四题...今年省赛堪忧! 先做Codeforce去了... A:汽水瓶 有这样一道智力题:"某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十 ...
- 国庆七天乐,写博也快乐之微信小程序天气预报+根据天气自动变换背景图实战(使用和风天气API)
hello,大家好,这里是X大魔王,先提前祝各位国庆节快乐
- 【20191001】国庆七天长假安排
[20191001]国庆七天长假安排 1. 作息时间表 2. 七天目标 (1)学习:将 Androi Audio 模块 从上层Java apk 到 kernel底层硬件 整个流程学懂 (2)锻炼:全身 ...
- Java学习第七天 ———— 第一周学习汇总(粗略)
Java学习第七天 ---- 第一周学习汇总 第一章Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大 ...
- 国庆七天假期就剩下最后一天了
国庆七天假期就剩下最后一天了,抽空赶一下代码.原计划假期可以多花点时间优化一下框架代码,最终只完成了一小半,虽然有些遗憾,但是相对这个假期的收获,还是非常值得. 回顾整个假期,有几点收获: 一个人用心 ...
最新文章
- OpenCV(项目)车牌识别4 -- 总结篇
- Java 注解用法详解——@SuppressWarnings
- 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点
- 大道至简,大数据的小窍门
- 华南理工网络教育计算机概论,2020年《计算机概论》平时作业华南理工网络教育学院.pdf...
- 小米10pro使用说明书_华为Mate40、华为P40和小米10拍照对比:哪一款最好?
- Go_笔试题记录-指针与值类型实现接口的区别
- Java导入sql失败_java – 在hibernate中导入import.sql失败
- python 梯度提升树_机器学习:梯度提升算法|python与r语言代码实现
- C#经典算法实践,回顾往生,更是致敬《算法导论》
- LNMT/LAMT实现动静分离、负载均衡和会话保持
- React 错误Each child in an array or iterator should have a unique “key” prop
- 我儿子今年初二,成绩非常差,可能上不了高中,我该怎么办?
- LAMP使开放源代码软件安全性提高
- Ubuntu英语环境下完全显示文泉驿微米黑字体的字体配置文件
- matlab中的uicontrol,Matlab的uicontrol出错
- ACL2020 | SongNet(格式可控的文本生成)
- 手机兼职做任务发布悬赏赚钱的APP汇总到底有多少?
- 外网如何连接学校服务器
- 钉钉免费实现内网穿透绝对靠谱