zoukankan      html  css  js  c++  java
  • Codeforces Round 286

    Codeforces Round 286

    https://codeforces.com/contest/505

    A

    给出一个长度为n的字符串。

    询问是否可以插入一个小写英文字母使其成为回文

    n<10

    直接暴力

    B

    给出一个n个点m条边的无向图。

    每条边有一个颜色ci。

    q次询问,每次询问两个数ui和vi

    求满足以下条件的颜色个数,该颜色的边直接或间接连接ui和vi

    n<=100 m<=100 q<=100

    做法:

    暴力枚举颜色,用并查集维护一下连通性。

    C

    n颗宝石,第i颗宝石位于pi岛上。

    一共30000个岛。

    一开始我在0号岛。

    首先,我从0号岛跳到d号岛。

    之后,设L为上次跳跃的距离,下一次可以跳L-1,L或L+1,但不能不跳。

    询问可以收集的最大数量的宝石。

    n,d<=30000

    做法:

    一个很妙的DP Trick。

    定义方程\(dp[i][j]\)表示到第\(i\)步,步伐长度变化j的能收集到的最大宝石数量。

    然后根据\(dp[i][j]\)这个值去往后更新。

    根据等差数列求和的性质,这个j不会太大,大概是-300到300。

    D

    n个城市。

    有m对城市是重要的。

    我计划建造单向边,使得对于每一对城市(ai,bi),都可以通过单向边从ai到bi。

    找出需要建造的最少数量的单向边方案,打印最少数量即可。

    n,m<=100000

    做法:

    结论:

    不同连通块之间显然不需要边,所以单独考虑每个连通块。

    一个连通块内如果没有环,可以根据拓扑序重构成一条链满足题目要求。

    一个连通块内如果有环,不管有几个环,都可以通过一个大环来满足要求。

    所以答案是n-连通块数量+含环连通块数量。

    E

    我有n根竹子。

    第i根竹子高度位hi米,每天生长ai米。

    我每天可以使用魔力k次,每次可以将一根竹子变低p米。不会变成负数,变成0,但不会消失。

    现在我有m天,我要最小化m天后最高竹子的高度。

    询问m天后最高竹子的最低可能高度。

    n<=100000

    m<=5000

    k<=10

    p<=1e9

    做法:

    二分,m天后最高的竹子为H是否可行。

    然后反过来做。

    先统一在第m天把所有竹子变成H。

    然后每天,所有竹子高度变矮ai,你必须保证所有竹子高度>=0,且m天结束后竹子高度>=hi。

    用一个堆维护,当前状态下继续减少高度而不拔高,第m天结束后竹子高度会<hi的竹子,一直减少高度,多少天后的高度会<0。

    每次取出剩余天数最少的竹子,拔高即可。

    如果无论怎么拔高还是会<0的竹子,直接返回错误。

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/15599926.html
Copyright © 2011-2022 走看看