zoukankan      html  css  js  c++  java
  • 9.7集训 总结

    今天wyc先生掳了四道题给我们... 本嘴巴AK选手吃枣药丸。

    T1
    题意简述:给出平面上n个点,两两连线,选尽量多的直线,使得所选直线中没有任何两条是平行的。n<=200。
    sol:按斜率排序… 然而似乎有精度问题… 天师把eps设成(10^{-6})就狗带了。解决方法有两个,一是用分数算,二是用叉姬(?)。

    T2
    题意简述:合并果子。n堆果子,每次可以选k堆合到一起。其他条件相同,求最小代价。 n<=10000。
    sol:我还是too naive。根本没有吸收到NOI2015 Day2 T1的经验。搞得我做过似的… k叉哈弗曼树,补零。当且仅当(n = p*(k-1)+1, p∈N^*)的时候才能像二叉那么做,也就是每次选满k个合到一起。现在感觉自己真是愚蠢,每次尽量吞k个,最后的尾巴一起处理,这样怎么可能对。当n不满足上面的式子的时候,在前面补0即可。

    T3
    题意简述:如图。

    sol:简单树形DP。N<=1000的范围,设(f[i])表示传递完以i为根的子树需要的时间。贪心一下,在i的儿子中,(f)越大的子树要越先传递。这样,一个(O(n^2))的DP就出来了。
    挖坑:那N<=100000要怎么做呢。设(f[i][0])表示从(i)传递到儿子的时间;……

    T4
    有一个长度未知的序列,满足如下的n个条件:至少有(c_i)个元素的值在区间([a_i,b_i])中。求序列的最短长度。
    sol:第一眼:裸上差分约束。然后想想:先把区间按左端点-右端点排序,对于第(i)个条件,找到最大的(j)使得(a_j<=b_i),然后尽可能地把第(i)个条件里的数放进这个区间里去,把第(i+1)个条件到第(j)个条件的(c)值都减掉(c_i),重复如此。很像喷泉覆盖的贪心方法。暴力(O(n^2)),可以过。如果二分/离散化+线段树可以做到(O(NlogN))

  • 相关阅读:
    我的Java学习路线图
    请求重定向和请求转发的区别
    PHP代码审计学习-php安全基础
    无密码正向直连内网linux目标机复现
    Windows API 学习
    Http请求走私
    免杀手法-tcp套字节传递shellcode学习
    自启动模块构造-计划任务
    自启动模块构造-快速启动目录
    进程注入免杀学习
  • 原文地址:https://www.cnblogs.com/yearwhk/p/5851499.html
Copyright © 2011-2022 走看看