zoukankan      html  css  js  c++  java
  • CodeForces 题目乱做

    是个补题记录。

    1419

    除了 F 场上都过了。

    CF1419A Digit Game

    这题好多人 FST 啊……

    考虑如果串长为奇数那么最后操作的肯定是第一个人,串长为偶数的最后操作的肯定是第二个,而且两个人的操作互相独立。

    所以如果最后一个操作的是第一个人而且存在一个奇数位置上的数是奇数的话那么第一个人肯定赢,否则第二个人肯定赢。

    最后一个操作的是第二个人的话同理。

    代码

    CF1419B Stairs

    很明显只有当 (n=2^k-1) 的时候 (n) 级的阶梯才会是好的,然后从小到大枚举一下就好了。

    代码

    CF1419C Killjoy

    注意到答案只有可能为 (0,1,2)

    答案为 (0) 的话很好判断,答案为 (1) 的话有两种情况:

    • 存在至少一个人与病毒的 rt 相同。那么这些人在第一场比赛之前就会被感染,于是只需要让那些没被感染的全部调成与病毒 rt 一样,被感染的那些随便改就行了。

    • 所有人的 rt 的平均值等于病毒的 rt。直接将所有人的改成病毒的 rt 就行。

    其他情况答案为 (2),也即先操作两个人使得一个人的 rt 被改成与病毒的相同,然后第二次比赛变成上面的情形 1。

    代码

    CF1419D1 Sage's Birthday (easy version)

    肯定是先排序然后均分成前后两组,然后前面的和后面的轮着填即可。

    注意到前面的每个值一定小于后面的每个值,所以前面的最多只会有一个数不会被贡献到。

    代码

    CF1419D2 Sage's Birthday (hard version)

    还是先排个序然后轮着放,放完了之后要重新算一遍答案。

    代码

    CF1419E Decryption

    注意到只有当 (n) 为两个不同质数的积的时候答案才可能为 (1),否则答案为 (0)

    否则设 (n=p_1^{alpha_1}p_2^{alpha_2}cdots p_n^{alpha_n}),那么可以这么构造一个环:

    首先将 (p_1,p_2,cdots,p_n) 顺时针排列,然后在每个 (p_i)(p_{i+1}) 中间插入 (p_ip_{i+1}),剩下没有被选中的因子就放到最小质因子右边就好了。

    代码和题解给出的构造方案稍微有点不同。

    代码

    CF1419F Rain of Fire

    题解

    1418

    这场根本没打。

    CF1418A Buying Torches

    每一次交易木棍可以白嫖 (x-1) 个,需要白嫖的木棍至少是 (yk+k-1) 个,随便算就行。

    代码有点迫害 syk 小鸽鸽向。

    代码

    CF1418B Negative Prefixes

    贪心很显然,将所有没被锁的数拿出来从大到小排序在一个一个塞回去就好了。

    代码

    CF1418C Mortal Kombat Tower

    不会贪心,只能 DP。

    (f_i) 为打到了第 (i) 个,最后一个是自己打的的答案,(g_i) 为打到了第 (i) 个,最后一个是朋友打的答案,那么有如下转移:

    [f_i=min(g_{i-1},g_{i-2}) ]

    [g_i=min(f_{i-1}+a_i,f_{i-2}+a_{i-1}+a_i) ]

    然后注意一下初值就好了。

    代码

    CF1418D Trash Problem

    题解

    1420

    赛场上只做到 D。

    CF1420A Cubes Sorting

    会冒泡排序的都知道这个 (frac{n(n-1)}{2}) 是理论的交换次数上界,然而这个上界只有在 (a_i>a_{i+1}) 的时候才会取到。

    代码

    CF1420B Rock and Lever

    打个表可以发现 (a&bgeq aoplus b) 只有当 (a)(b) 的二进制位数一样才会成立。

    代码

    所以按照二进制位开个桶然后从前往后扫一遍就好了。

    CF1420C1 Pokémon Army (easy version)

    这个题没有交换操作所以可以 DP。

    (f_i) 表示已经取了奇数个数,最后一个取的是 (i) 位置上的和 (g_i) 表示已经取了偶数个数,最后一个取的是 (i) 位置上的。可以很容易写出转移方程:

    [f_i=minlimits_{ileq k<i}(g_k+x_i) ]

    [g_i=minlimits_{ileq k<i}(f_k-x_i) ]

    在 DP 的过程中同时维护 (f)(g) 的前缀最大值就可以了,还是要注意一下初值。所给代码中的 (f)(g) 表示前缀最大值。

    代码

    CF1420C2 Pokémon Army (hard version)

    题解

    CF1420D Rescue Nibel!

    题解

    CF1420E Battle Lemmings

    题解

    1426

    没打,赛后打了一下,大概是 70min 左右切了 6 个题。

  • 相关阅读:
    poj 2516 Minimum Cost (最小费用流 )
    new start
    关于c语言中的声明和定义
    多态性与虚函数之对象切片
    C专家编程之typedef
    QGroupBox设置边框
    多态性与虚函数之继承中的virtual 晚捆绑
    使用Map
    遍历控件
    C专家编程之枚举
  • 原文地址:https://www.cnblogs.com/Karry5307/p/13721002.html
Copyright © 2011-2022 走看看