• 2020.11.02【NOIP提高A组】模拟


    GMOJ 2020.11.02提高组模拟

    T1.6843移形换影

    一道十分简单的模拟题,但是我的做法比较复杂,考场打+调了 (1h) 呜。

    首先 (0)(2) 的位置是不可调换的。考虑贪心地从左往右做:

    1.当前位为 (0),字典序一定最小,跳过

    2.当前位为 (1),往后找到最近的 (0) 并将其移到当前位前,要求 (0) 是最近的且与当前位之间没有 (2) 且剩余操作次数足够

    3.当前位为 (2),往后找到最近的 (1) 并将其移到当前位前,要求操作次数足够

    链表维护即可。


    T2.6844旅途和生活

    由数据范围提示可得:可以证明,若 (a), (b) 同为奇数,对于任意 (n) 对应的答案在取模前可以用 long long 保存。

    所以对于 (a), (b) 同为奇数的情况,只需计算出 (a^n - b^n) 二进制下后63位(也就是 (mod) (2^{63})),直接快速幂计算答案,可用 (unsigned) (long) (long) 避免高精度。

    十分显然的是, 若 (a), (b) 奇偶性不同,则答案为 1。

    对于 (a), (b) 为偶数,只需提出 (2^c) 使得 (frac{a}{2^c}), (frac{b}{2^c}) 中至少一个为奇数,分上面两种情况计算答案,最后乘回 (2^c)


    T3.6845梯度弥散

    看到数据范围 (c = 0, 1, 2) 就知道这一题是给人做的。

    首先可以贪心地从左往右一位一位满足条件,所以考虑二分答案。

    对于 (c = 0),发现每次都是给一段连续的区间加上一个相同的数值,直接差分。

    对于 (c = 1),每次都是给一段连续的区间加上一个公差为 -1 的等差数列,差分公差,对于每一位需加上的值前缀和维护。

    对于 (c = 2),发现 ((x + 1)^2 - x^2) 构成一个公差为 -2 的等差数列,按 (c = 1) 的方法维护等差数列,再计算出 (x^2) 即可。

    一波套娃行为打得有点头晕,注意题面规定 (0^0 = 1),考场因此炸了 (10) 分差评!


    T4.旅人1970

    很遗憾考场没时间想了,拿到的 (4) 分的好成绩。

    结论 (1)

    若确定 (i) 为莫个划分集最小众数,则包含 (i) 的划分集有且只有一个。

    证明 :

    若有多个划分集众数为 (i),那么将其合并答案更小;若 (i) 在某个最小众数不为 (i) 的划分集中,那么将 (i) 提出来也不影响答案。

    结论 (2)

    一个划分方案合法当且仅当众数的 (a_i) 之和不小于最大的 (a_i)

    结论 (2) 应该比较显然,有了结论 (2),我们就可以得出一个 (O(nq)) 的做法,每次选取一段最小前缀使得前缀和不小于 (v)(v) 表示最大的 (a_i)),然后从大到小地删除前缀中的数:如果前缀和减去 (a_i) 仍满足条件,那么就删去 (i),(比较显然的 (2^i > sumlimits_{j = 0}^{i - 1}{2^j}),所以可以从大到小贪心地删)

    满分还有个结论 (3) 暂时没看懂唔,但做法总的来说就是在线段树上暴力寻找删除区间

  • 相关阅读:
    24.纯 CSS 创作出平滑的层叠海浪特效
    23.1纯 CSS 创作一个菜单反色填充特效
    23.纯 CSS 创作一个菜单反色填充特效
    22.纯 CSS 创作出美丽的彩虹条纹文字
    21纯 CSS 创作文本滑动特效的 UI 界面
    BZOJ 2384: [Ceoi2011]Match (KMP,树状数组)
    BZOJ 1511: [POI2006]OKR-Periods of Words KMP
    UOJ #6. 【NOI2014】随机数生成器 贪心
    UOJ #25. 【IOI2014】Wall 线段树
    BZOJ 3670: [Noi2014]动物园 KMP
  • 原文地址:https://www.cnblogs.com/zhouzj2004/p/13920005.html
Copyright © 2020-2023  润新知