• 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) 暂时没看懂唔,但做法总的来说就是在线段树上暴力寻找删除区间

  • 相关阅读:
    JVM中java类的加载时机(转载:http://blog.csdn.net/chenleixing/article/details/47099725)
    自定义filter包
    Tomcat中Listener的使用范例(转载http://cywhoyi.iteye.com/blog/2075848)
    Quartz简单使用
    PAT A1119 Pre- and Post-order Traversals [前序后序求中序]
    PAT A1115 Counting Nodes in a BST [二叉搜索树]
    PAT A1110 Complete Binary Tree [完全二叉树]
    PAT A1102 Invert a Binary Tree [反转二叉树]
    PAT A1099 Build A Binary Search Tree [二叉搜索树]
    PAT A1094 The Largest Generation [树的遍历]
  • 原文地址:https://www.cnblogs.com/zhouzj2004/p/13920005.html
Copyright © 2020-2023  润新知