zoukankan      html  css  js  c++  java
  • 算法竞赛进阶指南 0x00

    0101a^b

    快速幂模板,写一下快速幂的原理。

    我们知道,一个数(n)在二进制(也可以是其他进制)下可以被表示为(a_1+a_2*2^1+a_3*2^2+...+a_m*2^{m-1})。那么我们可以考虑将其分拆成二进制状态下的每一位,然后做幂运算。这样做的时间复杂度为(O(log_2 n))

    实现的过程类似于倒过来的分治(当然也可以直接分治实现),原理基于以下的式子。

    对于k为偶数,(n^k=(n^2)^{k/2})

    对于k为奇数,(n^k=n*(n^2)^{(k-1)/2})

    0102 64位整数乘法

    本质上和上一道题一样,注意数据范围即可。

    0103 最短Hamilton路径

    状压DP。

    (f[i][j])表示在经过的点状态为i,当前位置在j上路径长度的最小值。

    枚举中转点进行转移即可。

    0301 递归实现指数型枚举

    dfs,在每个状态都输出一下。

    0302 递归/非递归实现组合型枚举

    dfs,限制结束长度。

    0303 递归实现排列型枚举

    dfs。

    0304 IncDec Sequence

    运用差分数列性质的妙题。

    众所周知,差分就是前缀和的逆运算,当相邻两个元素相同的时候,差分数列里对应的一项会变为0,

    当我们将某一个区间加上或减去1的时候,差分数列里只有两项变化,所以这就是个结论题了。

    统计差分序列里正数之和与负数之和的绝对值(不包括第一项),取最大值就是第一个答案,差的绝对值+1就是第二个答案。

    0501 货仓选址

    小学奥数结论题,中间最小。下面给出证明:

    假设仓库的坐标为(a_1,a_2,...,a_n),选择的位置为(x),那么本题等价于求

    (|x-a_1|+|x-a_2|+...+|x-a_n|)

    的最小值。

    假设n为奇数,那么我们可以将除了(a_{(n+1)/2})的项两两配对,对于每一个配对((a_k,a_{n+1-k}))(|x-a_k|+|x-a_{n+1-k}|)的最小值在(kleq xleq (n+1-k))的时候取到。

    显然当((n-1)/2leq xleq (n+3)/2)的时候对于除了(a_{(n+1)/2})的项之和取到了最小值,那么只要取(x=a_{(n+1)/2})就可以取到整个算式的最小值了。

    当n为偶数时同理之。

    POJ3614 Sunscreen

    首先明确一个问题:选A和放弃A选B本质上不存在优劣之分(不考虑对其他牛的影响),因此尽量满足当前牛肯定不会有错。

    我们将牛的下限从大到小排序,然后将防晒霜也从大到小排序,对于每一头牛,我们遍历防晒霜寻找小于它上限且最大的防晒霜。

    正确性证明:

    假如对于现在这头牛有更好的选法,那显然只能选更小的,那么就浪费了现在的这个选择。浪费=没那么好,Q.E.D

    POJ1328 Radar Installation

    这道题第一眼有点复杂,但其实可以进行简化。

    对于每一个点都可以在x轴上找到一条对应的线段,使任何建立在线段上的雷达都能都包含该点。

    那么本题即可转换为求对于一系列线段,使所有线段都包含点的最少数量。

    将线段对于左端点排序,然后记录最右侧的点。

    如果现在的线段的左端点大于最右侧的点,那么只能新加一个点。

    反之,尽可能将最右侧的点向右移(在不违背已有线段的前提下)。

    正确性过于显然。

  • 相关阅读:
    nagle算法和TCP_NODELAY
    Makefile 中的.PHONY
    Linux--信号阻塞与屏蔽
    Linux的SIGUSR1和SIGUSR2信号
    Github和Git上fork指南
    Python 中函数的 收集参数 机制
    【奥斯卡理财星体系 第二章】丨你该如何做好理财规划
    【奥斯卡理财星体系 第一章】丨你该如何找到理财正确的方向
    【奥斯卡理财星体系 序篇】为什么你需要学习这个理财体系?
    零基础学基金投资系列-08-基金排行榜
  • 原文地址:https://www.cnblogs.com/ilverene/p/11142206.html
Copyright © 2011-2022 走看看