• Codeforces Round #669 题意及思路


    A题

    题意

    有一个由 $ 0,1 $ 组成的数组 $ a $ ,请删除不超过 $ n/2 $ 个数使奇数位上的数之和等于偶数位上的数之和。

    思路

    看到 $ n/2 $ 就想到应该是与把某一个数全部删除有关。
    1.如果 $ 0 $ 不少于一半,那么把 $ 1 $ 全部删去。
    2.如果 $ 0 $ 少于一半,那么把所有 $ 0 $ 删去,如果 $ 1 $ 的个数为奇数则再删去一个 $ 1 $ 。

    B题

    题意

    对一个数组 $ a $ 重新排序,使得数组 $ c $ 的字典序尽量大。 $ c_i=gcd(a_1,a_2...a_i) $ 。

    思路

    首先第一个数肯定是最大数,然后每一次找一个能使最大公约数尽量大的数,时间复杂度为 $ O(n^2logn) $ ,可以过。

    C题

    题意

    有一个前 $ n $ 个正整数的排列,每次询问 $ x,y $ 得到 $ a_x mod a_y $ 的值,最多使用 $ 2n $ 次询问,猜出这个序列。

    思路

    对于两个数 $ a<b $ , $ a mod b=a, b mod a < a $ ,故通过询问 $ a,b $ 和 $ b,a $ 就可以确定一个数,即每两次询问可以确定两者中较小的数。经过 $ 2(n-1) $ 次后仍有一个数不能确定,因为是前 $ n $ 个正整数的排列,所以他就是最大数 $ n $ 。

    D题

    题意

    有 $ n $ 栋高楼排成一行,每栋楼都有一个高度 $ h_i $ 。如果 $ i,j $ 满足以下三个条件之一,则称可以从第 $ i $ 栋楼跳到第 $ j $ 栋楼。
    1.$ j=i+1 $ 。
    2.$ max(h_{i+1},h_{i+2}...h_{j-1})<min(h_i,h_j) $ 。
    3.$ min(h_{i+1},h_{i+2}...h_{j-1})>max(h_i,h_j) $ 。
    现在你在楼 $ 1 $ ,请求出跳到楼 $ n $ 最少要跳几次。

    思路

    显然是一个 $ DP $ ,有 $ 3 $ 个条件可以转移方程。第 $ 1 $ 个条件很显然。
    第 $ 2 $ 个条件

    E题

    题意

    $ n $ 个点 $ m $ 条边的有向图,边有黑白两种颜色。现在要给点染色,每个点染成黑或白,白点只能走它连出的白色边,黑点只能走它连出的黑色边,求一种染色方案使得 $ 1→n $ 的最短路径最长。

    思路

    如果正着走过去,每次要讨论点是黑色还是白色,那太难了。如果反向考虑,从 $ n $ 走回 $ 1 $ ,那就是根据走过边的颜色确定到达点的颜色,限制少一些,看起来可行。
    考虑用 $ bfs $ 先把 $ n $ 加入队列,每次第一次可以走到某一点时就把路封上,即给这个点染上与边相反的颜色,如果以后有与该点颜色相同的边可以走过来时,再将该点加入队列。因为所有边的长度均为 $ 1 $ ,所以先加入队列的点一定比后加入队列的点 $ dis $ 值小,所以这样做是正确的。
    注意:
    1.有向图,在开始时只用添加反边即可。
    2. $ n=1 $ 时可能需要特判。

    总结

    这一次只做出来了前三题,D是因为单调栈只会模板,但是内核没有搞得很清楚;E如果想到能反过来应该也就做出来了,可惜没想出来。下次努力。

    提交记录

    写的很乱,请多多包容!!!
    $ A $ 题: A
    $ B $ 题: B
    $ C $ 题: C
    $ D $ 题: D
    $ E $ 题: E

  • 相关阅读:
    6.Mysql事务索引备份视图
    5.MySQL函数
    4.Mysql:使用DQL查询数据
    JavaScript的柯里化和反柯里化
    主流浏览器的内核以及Hack写法
    JavaScript的arguments对象
    JavaScript自定义事件监听
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/Mercury04/p/13715730.html
Copyright © 2020-2023  润新知