zoukankan      html  css  js  c++  java
  • 「考试反思」2020-11-24 扩展

    T1

    考虑每个值对逆序对数的贡献

    从大往小了走,每次剪掉贡献即可

    写完拍完大概是 (7:50) 其实不是很快

    T2

    比较神奇的题目

    考试的时候写了纯暴力和不相交还有在一行的情况

    考后补上正解

    这题目其实考完听 (lin4xu) 说就发现自己确实有点差距了

    根本没有往建图那方面想,外加上前天晚上的 (T2),直接拓扑就能 (40)

    不过自己冲那题单调性的性质了

    考虑对冲突进行建图,因为冲突是必须要考虑的

    其实这个 (T) 形板的本质就是选择四向其中一个删掉

    如果有一个点被三个十字架覆盖了,那么肯定没有解

    那么一共只有两种情况,其一是所有的冲突可以连成一个树,其二是可以整成一个基环树

    是树的时候选择一个最小的值剪掉就行了

    把图上所有的特殊点和特殊点周围的几个点连上边,会形成一些联通块

    这些联通块里面如果特殊点的个数(也就是板的个数)不足于板之间边的个数,那么无解

    如果相同的话就是个基环树,反之就是树

    树的话找整个块里面最小的 (val) 剪掉就行了

    想明白之后,代码并不难写

    思路积累:建图

    如果产生在矩阵上面产生冲突关系这种可以试试建图再找结论

    T3

    考试的时候过不了样例的复杂度正确的做法就过了,我只冲了暴力(不过好像过不过并不重要)

    最妙的一步转化是二分 (check) 的时候逆向维护

    即先把竹子拎上去然后往下掉,满足最后所有的 (H_ile h_i) ,同时过程中不能出负数

    直接贪心维护下次的时间即可

    这样做是 (O((n+mk)log n log Maxx)) 的,并不能过掉所有数据

    考虑如何提升效率,按照多次见过的,比如 贪吃蛇 和 蚯蚓

    (c_{i,j}) 为竹子 (i) 在第 (j) 天被砍的次数,所以一个竹子的最后的高度值是

    [max(h_i+a_i imes m-(sum c_{i,j} imes p),max_{j=1}^m a_i imes (m-j+1)-p imes sum_{kge j+1} c_i,k ) ]

    维护每天的看树情况,用 (m) 个队列维护即可

    相当妙的做法

    T4

    好像大家都用的高斯消元或者手动解方程?

    不过还可以有这样一种做法:

    观察到这个每个数是多少没有什么用,我们只需要差值

    设当前的量是 (a>b>c,m=frac{a+b+c} 3)

    那么先让 (a) 拿出来 (a-m) 个,这样做是有 (2^{a-m}) 中情况,记得乘上逆元,也就是说

    [ans=frac{1}{2^{a-m} }sum f_{m-k,m,m+k}+a-m ]

    这里的 (k) 显然可以枚举,然后根据线性性来推一下概率

    这东西是可以发现是可以归纳成 (f_{0,x,2x})

    [f_{0,x,2x}=x+frac{1}{2^{x}}sum_{i=0} inom x i f_i ]

    具体就是说这个每次有多少步就给另外一个人

    发现这个 (n^2) 求有点费劲,那么打表发现这个是 (f(0,x,2x)=2x)

    所以每次求一下就行了

    确实是道非常好的计数题

  • 相关阅读:
    offsetheight和clientheight和scrollheight的区别以及offsetwidth和clientwidth和scrollwidth的区别
    响应时间控制
    浏览器兼容
    生成随机数
    递归加载目录
    用委托定义的冒泡排序法
    ref 与out
    二维数组与交错数组的理解
    C#学习
    Jquery选择器
  • 原文地址:https://www.cnblogs.com/yspm/p/14069571.html
Copyright © 2011-2022 走看看