zoukankan      html  css  js  c++  java
  • Codeforces Round #710 (Div. 3) 题解(A-G)

    AC代码

    A. Strange Table

    不妨假设表中的数字从(0)开始,且行列也从(0)开始。

    此时数字(x)在按列排时位于((lfloor frac{x}{n} floor, x ext{ mod } n))

    而案行排时,((i, j))上的数字为(i + j * m)

    最后再转换回来就行了。

    B. Partial Replacement

    (dp_i)为仅考虑(s_{1 dots i}),将(s_i)*变为x,且符合条件的最小代价。

    那么有:

    [dp_i = left{ egin{matrix} & infin & ext{if } s_i e * \ & min_{j} dp_j + 1 & ext{if } s_i = * \ end{matrix} ight. ]

    为了满足条件1,将(dp_{first})设为1,然后从(first + 1)开始计算。

    为了满足条件2,取(dp_{last})为答案。

    C. Double-ended Strings

    数据量很小,直接暴力。

    首先遍历(a)的所有字串,将其加入集合(S)

    然后再遍历(b)的所有字串,看其是否再集合(S)中。

    复杂度为(O(n^3))

    D. Epic Transformation

    (cnt_i)(i)(a)中出现的次数,(ma)(max_{i} cnt_i)

    如果(ma)超过(n)的一半,那么(i)就不可能会被消完,此时用其余元素与(i)一一配对消除。

    否则,就代表可以消完。

    注意,第二种情况若(n)为奇数,最后会剩下一个元素。

    E. Restoring the Permutation

    用一个集合保存排列。将(q)中已有元素删除。

    minimum

    因为要字典序最小,所以每次遇到重复元素,就拿集合中最小元素放上去。

    maximum

    因为要字典序最大,所以每次遇到重复元素,就拿集合中当前元素的前驱放上去。

    F. Triangular Paths

    因为是单向的,所以最终的路径只有一条,其顺序就是将所有点按(r)升序排序。路径确定了,现在只需要算出每一步的代价,然后累加就可以了。

    ((1, 1))走到((x, y))(x = y),那么只能一直向右走,代价为(x - 1)

    ((1, 1))走到((x, y))(x = y + 1),可以先向左走,再不断向右走,代价为(0)

    而从((1,1))走到((x, y))(x = y + 2)只需要先走到某个(x = y + 1)的点再花1的代价向左走。

    以此类推,从((1,1))走到((x, y))的代价为(lfloor frac{x - y}{2} floor)

    假设当前位于((cx, cy)),下一步要走到((nx, ny))。此时:

    • 如果(cx - cy = nx - ny),那么只能不断向右走
    • 否则,此时相当于从((1,1))走到((x, y) = (nx - cx + 1, ny - cy + 1)),不过根据(cx + cy)奇偶性的不同,路径的方向可能会是原图的镜像,但是计算方法是相似的。

    G. Maximize the Remaining String

    最后的结果就是(s)的字符集的某个排列。

    考虑贪心,每次枚举尚未用到的字符,从中选一个可行且最大的,将其加入答案的末尾。不断重复至用完所有字符。

    判断可行

    假设现在的字符串为(s),当前枚举到的字符为(target)

    选择(s)中的一个(target),那么其之前的任何字符都需要被删去,且其之后的(target)也要报删去。易得:此时选择第一个(target)会比选择其他(target)更优。

    完成操作之后,新字符串的字符集只比原串字符集少掉一个(target),则表示(target)可行。

  • 相关阅读:
    Effective STL~2 vector和string(条款13~18)
    Effective STL~5 算法
    Effective STL~6 函数子、函数子类、函数及其他
    Effective STL~7 在程序中使用STL
    Effective STL~4 迭代器(条款26~29)
    STL std::remove和std::remove_if
    C/C++ 计算算法的执行时间
    Effective STL~3 关联容器(条款19~25)
    Effective C++读书笔记~7 模板与泛型编程
    C++ Primer学习笔记 原始内存分配类allocator
  • 原文地址:https://www.cnblogs.com/zengzk/p/14583744.html
Copyright © 2011-2022 走看看