• 作业_2018.08.25


    A. qhy的锐角三角形

    前置技能: 圆周角相关,高斯求和公式,组合
    推公式

    B. qhy的目标

    矩阵快速幂注意要点:

    变量的值莫名变了,可能是数组越界影响其他变量
    矩乘不满足交换率 ,但可以顺着写
    局部不能更全局变量?
    记得两种初始化【清空和对角元】,而且不能在结构体
    数组是指针变参?
    每个矩阵注意不要漏元素没有填

    C. qhy的橘猫

    D. [AHOI2017初中组]alter

    这个(check(mid))这么写
    我们假设不重复花费机会,那么花最少机会的就是,尽量越往后使用,否则可能会比不这么做增长连续序列的长度,这对我们是不利的,但是要注意因为是在(mid + 1)为发现超过(mid) ,如果(mid+2) 刚好是相反的,直接改(mid + 1)会延长后面的相反区间的长度,所以这时改(mid)

    AT
    这样又可能使得(mid == 1)时,修改(mid)会延长前面的,又各种后效性,

    所以直接把(1)的情况提出来规定一个(0-1)序列写(xor)然后再反过来搞一遍

    题目说剩下的机会不一定是要用完滴
    【各位julao们都用公式 %%%%

    E. [AHOI2018初中组]分组

    子任务搞法搞不动?来敲敲正解比啊

    暴力

    有个(n^2)的做法,(a[i])每次给已知最少的组能接的接长

    优化暴力

    思维难度相对小但是用到了STL里的priority_queue和map. 从小到大加入每一个元素, 每次贪心地找到上一个元素是X-1的组并加入这个元素, 如果有多个,加入元素数量最小的那个组; 如果没有,则创建一个新组,组内元素只有X. 具体实现,可以用map套priority_queue实现, map维护的组内的上一个元素,pq维护的是满足条件的所有组的大小. 离散化后开O(n)个priority_queue也是可行做法.
    复杂度(nlogn)

    二分答案

    每次强制取(l)个连续的,取不到的话考虑拼到前面,辅助数组搞一下ok
    复杂度(nlogn)

    贪心

    qwq很接近刚开始我的想法,无奈还是太菜(

    将所有人的实力值放进一个桶里,
    每次考虑将没有分配的人中实力值最小的那个人提出来,单独为一个组

    假设这个人的实力值是(p),把这个人放入当前组, 按照(p+1,p+2 cdots x)依次遍历实力值, 依次把每个桶里选一个放进这个组,假设当前遍历到是(x),当剩余的实力值为(x)的人数小于实力值为(x-1)的人数【有下降的趋势】,则让这一组最大元素为(x-1),这个组就分配完了

    这样不断取出元素直到所有元素都被分组,此时人数最少的组就是最优解.

    ==做法正确性证明:
    剩余的实力值为(x)的人数小于实力值为(x-1)的人数(<=>)定有一组中实力值最大的实力值(Max)(x-1)即以(x-1)结尾;

    然后易知每次新的小组的(Min)单调不下降,(Max)也是如此,所以组的大小(|Max-Min+1|)可以显然达到最优

    ==离散化注意
    对于(|A_i| leq 10^9)无法直接存到一个桶里的情况, 将实力值排序后离散化,对于不连续的实力值中间加上一个容积为(0)的桶 (注意两倍数组)

    时间复杂度O(nlogn).

    【貌似来自官方题解2333

    F. 仓鼠找sugar

    刚开始看错题 。。。
    由于在树上中要有相交的路径的话,(a->b)(c->d)
    中,交点为至少一条路径的(lca),因为交点只有一个爸爸,又不能是两个(lca)的共同儿子,而且(lca)也不会是他的儿子。

    对相交的情况分类
    情况一:
    (lca(a,b)=lca(c,d))这时显然有交点
    情况二:
    三个点在一棵子树,另外一个点在另一棵子树
    假设(lca(a,b))为交点,显然(c,d)中有一个应当为(lca(a,b))的儿子或孙子,这里有(2)种情况,假设这个点为(c),根据对称性易知(a,b)中至少有一个点,假设为(a),那么满足(lca(a,c) = lca(a,b)),如下图所示

    由于(a,b)也有两种情况,所以根据乘法原理,这里共有(4)种情况

    G. 组合数问题 125E591

    脑子是个好东西(
    首先涨点姿势,对于(C_n^r)可以求它的对数,要用double保存,不影响比较大小

    [ egin{align*} ln(C_n^r) &= ln(dfrac{n!}{m!(n-m)!})\ &= ln(n!) - ln(m!) - ln((n-m)!)\ &= sum_{i=1}^n ln(i) - sum_{i=1}^m ln(i) - sum_{i=1}^{n-m} ln(i) end{align*} ]

    这就可以直接用了
    上式还可以化成$$sum_{i=1}^m ln(i) + sum_{i=n-m+1}^n ln(i) - sum_{i=1}^m ln(i) - sum_{i=1}^{n-m} ln(i) = sum_{i=n-m+1}^n ln(i) - sum_{i=1}^{n-m} ln(i)$$虽然还是得用前缀和
    还有expln为互逆函数
    来自大数量级组合数的计算方法

    貌似暴力求log前缀和的常数比较大,使用线性筛可以解决这个问题?

    然后标程告诉我们可重集的排序是不需要去重的
    所以我们定义一个二元组((x,y))表示(C_x^y),根据对称性也就是杨辉三角左半部分的坐标对应的组合数,先把中间的全加进去,然后用堆维护一下就可以了

    注意:(k)表示还要取出(k)个数,每次取出一个数相当于取出两个数k-=2,看成是把左右对称的两个绑在一个包加进去,隔行相同的情况因为会添加多个包所以没问题,除了当(odd(n + 1))时,就是(n)为偶数时,中间的数是唯一的以及k=1时特判一下
    int是20亿左右,2e10左右

    由于懒得学STL然后学了下斜堆23333

  • 相关阅读:
    调试代码的技巧
    关联Lable和输入项
    如何更有效的利用自己的时间
    高效能人士的七个习惯>读书笔记之二
    .NET别名机制简介
    VS2005升SP1错误1718文件FileName被数字签名策略拒绝
    程序物语(三):做人、做事、生活
    程序物语(二):起手式
    SQL Server 2008如何压缩日志(log)文件?
    prototype中文参数乱码解决方案
  • 原文地址:https://www.cnblogs.com/bobble/p/9535324.html
Copyright © 2020-2023  润新知