zoukankan      html  css  js  c++  java
  • CF1359 简要题解

    无言投下(指摸了)。

    • A

    显然让某个人尽可能多拿,剩下的尽可能平均分配最优。

    • B

    每一行是独立的。设 (f_i) 表示填满前 (i) 个位置所需的代价,根据 (s_i)(s_{i-1}) 的情况,可以决定是否从 (f_{i-1})(f_{i-2}) 转移。

    • C

    可以发现,如果倒了偶数次,那么平均温度必然是 (frac{c+h}{2}),因此只可能倒了 (2) 杯。

    现在只考虑倒了 (2x-1) 次的情况,即 (x) 次热水,(x-1) 次凉水,此时温度为 (f(x)=frac{xh+(x-1)c}{2x-1})。感性理解或者稍微推一下式子就可以发现,(f(x)) 是单调减的,且当 (x ightarrow +infty) 时,(f(x) ightarrow frac{c+h}{2})

    因此,如果 (tleq frac{c+h}{2}),那么一定是倒 (2) 杯,否则,要使 (f(x)) 尽可能接近 (t) 的话,只需要找到最小的 (x),使得 (f(x)geq t),答案取 (x)(x+1) 中较优的一个即可。这个过程可以二分,也可以由 (frac{xh+(x-1)c}{2x-1}geq t)(t>frac{c+h}{2}) 推出 (xgeq frac{c-t}{h+c-2t}),直接算即可。

    • D

    不难发现,对于任意选定的区间 ([l, r]),对方都会移除区间内最大的元素。不妨设相同元素中左边的更大,那么如果被移除的位置是 (x),对应的被选中的区间 ([l, r]) 应满足 (max_{i=l}^{x-1} a_i<x, max_{i=x+1}^r a_ileq x)。双指针一波,很容易就能找到每个位置可能的最大区间 ([l', r']),每个以 (x) 作为区间最大值的区间都是 ([l', r']) 的子区间。

    于是就很简单了,只需要对每个 ((x, l', r')),求出 ([l'-1, x-1]) 内,令 (sum_{i=1}^k a_i) 最小的 (k),左侧的答案就是 (sum_{i=1}^{x-1} a_i-sum_{i=1}^k a_i),右侧同理。这个最小值可以用线段树简单维护。

    • E

    (a<b),则 (xmod amod b=xmod a)。若 (xmod amod b=xmod bmod a),则 ((xmod b)mod a=xmod a),即 (xequiv xmod b pmod a)。注意到 (xmod b=x-lfloorfrac{x}{b} floor cdot b),上式等价于 (xequiv x-lfloorfrac{x}{b} floor cdot bpmod a),即 (lfloorfrac{x}{b} floor cdot bequiv 0pmod a)。由于 (x) 是任意选取的,想要对任意的 (x),这个式子都成立,只有 (bequiv 0pmod a),即 (a|b)。对于原题,不难发现题目中的要求,必要条件是 (forall iin [1, n], a_1|a_i),并且它的充分性显然。因此,只需要枚举 (a_1),剩余的 (a_i) 共有 (inom{lfloorfrac{n}{a_1} floor-1}{k-1}) 种方案。

    • F

    这题思路其实非常经典,但是代码过于精污所以……

    首先,二分答案之后转化为判定是否有两条线段相交,而这个问题可以在 (O(nlog n)) 的时间内解决。

    将所有端点按照横坐标排序,这样每个时刻的操作就形如添加或删除一个一次函数。注意到,假如我们按照当前(指 (x=x_0))的 (y) 值排序后,如果任意两条排序后相邻的线段之间都不相交,那么在下一个插入或删除操作前,任意两条线段都不会相交,并且任意两条线段之间的 (y) 值的大小关系都不会改变。因此,只需要用一个 set 维护当前所有的线段(注意排序的关键字是将 (x=x_0) 代入后的 (y) 值,由于在未找到交点时,它的大小顺序不会改变,这里的关键字设置是合法的),每次插入、删除操作时,判断 “新成为相邻” 的两条线段是否相交即可。

    但是还存在一些代码上的难点。首先是如何判断两条线段是否有交。如果它们平行,那么只有截距相同且长度足够才可以。否则,可以把它们当作直线,求出交点后再判断交点到线段端点的距离。交点求法很容易在网上找到,这里不再赘述。另外一个问题是,在线段数量很少时,答案可能会非常大,二分起来会很麻烦。一个解决方案是在 (n) 较小时暴力求 (inom{n}{2}) 对射线相交的最短时间。

  • 相关阅读:
    中国的网游,发人深省
    .NET开源Bug管理软件BugTracker.NET使用小记
    开源的学术论文排版软件TeX简介
    在sqlplus中批量执行sql命令
    DotNetBar中ExpandableSplitter使用技巧
    上传一很酷的黑色背景.vssettings文件
    瑞雪兆丰年2008年的第一场雪
    Oracle用Start with...Connect By子句递归查询
    【转载】Making new features with topology tools(ArcInfo and ArcEditor only)
    Geoprocess Execute出错原因?Vb+AE9.2
  • 原文地址:https://www.cnblogs.com/suwakow/p/13027394.html
Copyright © 2011-2022 走看看