Skip to content

Commit

Permalink
4.21
Browse files Browse the repository at this point in the history
  • Loading branch information
dtcxzyw committed Apr 21, 2019
1 parent c444bf7 commit 7c43333
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 14 deletions.
17 changes: 16 additions & 1 deletion Review/Other/TricksAndIdeas.tex
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,21 @@ \subsection{MITM}
暴力搜索的状态数为$3^{15}$数量级,但是双向BFS搜索的状态数为$2*3^8$数量级,
可以通过该题。每轮迭代中,两边各走一步,同时进行检测,这样做找到一组可行解就可以
返回了。
\subsubsection{经典模型}
\begin{itemize}
\item 有向图模型:给定有向图$G$,求点$A$到点$B$长度为$L$的路径数。

解法:从两个起点开始搜索长度为$L/2$的路径,使用散列表记录答案。
\item {\bfseries 方程模型}:求$\displaystyle \sum_{i=1}^n{f_i(x_i)}=c$
的方案数。

解法:将未知数分为两组枚举。
\item 对于不指定始终点的题目,考虑``从中间出发''
\end{itemize}

事实上并不一定要均匀分组,不均匀分组有时能获得更优秀的复杂度。

\lstinputlisting{Source/Source/Search/2324.cpp}
该内容参考了国家集训队2013论文集乔明达的《搜索问题中的meet in the middle技巧》。
\subsection{倍增}
通过多一个$\lg$预处理跳跃$2^k$步的信息,以达到$\lg$级快速移动的目的。

Expand Down Expand Up @@ -299,6 +312,8 @@ \subsection{二进制分组}\label{BinIns}
&\leq&\sum_{k=1}^{\lg n} {n \lg n}\\
&=&O(n\lg^2 n)
\end{eqnarray*}

根据题目的需要可以选用$k$进制分组以优化时间复杂度。
\subsection{整体二分}
对于某些离线问题,若其询问仅一种且可二分,整体二分是个不错的选择。
其思想是将所有询问的二分操作放在一起,分治将询问分组到两个区间中。
Expand Down
9 changes: 7 additions & 2 deletions Review/SetAndGroupTheory/PermutationGroups.tex
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,13 @@ \subsection{置换的群性质}

\begin{itemize}
\item 置换快速幂
\item 置换BSGS求离散对数
\item 置换同余方程组

置换快速幂可以在$O(n)$而不是$O(n\lg n)$内解决。考虑求出置换的每个循环,循环内
的幂可以$O(1)$找到对应位置。
\item 置换求离散对数(BSGS)

利用循环的性质可以避开BSGS。当对应位置的元素不在同一个循环内时无解,否则可以根据
环上位置差列出模线性方程组。
\end{itemize}

\index{*TODO!置换的群性质结合数论的应用。}
Expand Down
6 changes: 2 additions & 4 deletions Review/Summary/Keyword.tex
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ \subsection{约束}
\item 网络流
\item 差分约束
\end{itemize}
\begin{itemize}
\item 等式条件约束:拉格朗日乘子法
\end{itemize}
\item 等式条件约束:拉格朗日乘子法
\end{itemize}
\subsection{位运算}
\begin{itemize}
Expand All @@ -29,4 +27,4 @@ \subsection{在指定范围内存在}
\item 扫描线
\end{itemize}
\subsection{两项乘积小于定值}
对数据分治,步长小的一起转移,步长大的单独转移。
分块/对数据分治,步长小的一起转移,步长大的单独转移。
3 changes: 2 additions & 1 deletion Review/Summary/Summary.tex
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
\chapter{基于问题的思考方向}
\chapter{总结}
\minitoc
\input{Summary/Input}
\input{Summary/Keyword}
\input{Summary/Time}
31 changes: 31 additions & 0 deletions Review/Summary/Time.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
\section{时间轴有关问题}
\subsection{静态问题}
\begin{itemize}
\item 对固定区间的结果有影响:将存在转化为扫描线插入+删除,变为动态问题。
\end{itemize}
\subsection{动态问题}
在询问中带有修改操作,修改对后续的询问有影响,修改之间对询问的贡献独立。

\begin{itemize}
\item 仅插入:
\begin{itemize}
\item 离线:对于后半部分的询问,前半部分的所有修改均对它们有影响。使用$\lg$
代价进行CDQ分治。
\item 强制在线:二进制分组
\end{itemize}
\item 离线+插入+删除
\begin{itemize}
\item 将其转化为在固定区间内存在,变为静态问题,使用时间线段树解决。
\item 对于后半部分的询问,前半部分在该询问前未被删除的元素有贡献。考虑
从右到左扫描后半部分的询问,使用时光倒流将前半部分的删除转化为插入。再
套用仅插入的做法,以$\lg^2$的代价除去动态插入删除操作。
\end{itemize}
\end{itemize}
\subsection{时间分治技巧}
\begin{itemize}
\item 分治前预排序,分治到子区间时线性划分
\item 分治后尽可能线性合并子区间的信息
\item 分治计算一边对另一边的贡献时,考虑不建立数据结构,使用双指针法线性计算
\end{itemize}

该内容参考了国家集训队2013论文集许浩然的《浅谈数据结构题的几个非经典解法》。
10 changes: 4 additions & 6 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -380,15 +380,13 @@
- [ ] 随机化算法在信息学竞赛中的应用 胡泽聪
- [ ] 寻找第 k 优解的几种方法 俞鼎力
## 2013
- [ ] 浅谈分块思想在一类数据处理问题中的应用 罗剑桥
- [ ] 搜索问题中的 meet in the middle 技巧 乔明达
- [ ] 浅析信息学竞赛中概率论的基础与应用 胡渊鸣
- [ ] 浅谈数据结构题的几个非经典解法 许昊然
- [x] 浅谈分块思想在一类数据处理问题中的应用 罗剑桥
- [x] 搜索问题中的 meet in the middle 技巧 乔明达
- [x] 浅析信息学竞赛中概率论的基础与应用 胡渊鸣
- [x] 浅谈数据结构题的几个非经典解法 许昊然
- [ ] 浅谈环状计数问题 高胜寒
- [ ] 浅谈容斥原理 王迪
- [ ] 浅谈一类分治算法 顾昱洲
## 2005
- [ ] 置换群快速幂运算 研究与探讨 潘震皓
# Other
- [ ] 使用Vim或Emacs
- [ ] 学习十指打字(目标:250cpm)
Expand Down

0 comments on commit 7c43333

Please sign in to comment.