zoukankan      html  css  js  c++  java
  • test 200502

    test 200502

    T1 商店购物

    得分情况

    期望:0

    实际:0

    改后:100

    题意

    ​ 在 Byteland 一共开着 n 家商店,编号依次为 1 到 n,其中编号为 1 到 m 的商店有日消费量上限,第 i 家商店的日消费量上限为 w i 。
    ​ Byteasar 每次购物的过程是这样的:依次经过每家商店,然后购买非负整数价格的商品,并在结账的时候在账本上写上在这家商店消费了多少钱。当然,他在这家商店也可以什么都不买,然后在账本上写上一个 “0”。
    ​ 这一天,Byteasar 日常完成了一次购物,但是他不慎遗失了他的账本。他只记得自己这一天一共消费了多少钱,请写一个程序,帮助 Byteasar 计算有多少种可能的账单。

    犯傻原因

    ​ 可能一开始推公式没什么思路就直接跳过了,后来一直在调试后面的题目就没怎么管了。

    正解

    考虑 DP,设 (f[i][j]) 表示考虑了前 i 个商店,目前选的商店的上限 +1 之和为 (j) 时的贡献。

    如果这个商店不选,那么有 (f[i][j]+ = f[i − 1][j]),否则有(f[i][j]− = f[i − 1][j − w[i] − 1])

    (sum ans = sum_i f[n][i]C_{k + n − 1 − i}^{ n − 1})

    时间复杂度 (O(n + k + m^2 w))

    T2 公路建设

    得分情况

    期望:30

    实际:30

    改后:100

    题意

    在 Byteland 一共有 (n) 个城市,编号依次为 (1)(n) ,它们之间计划修建 (m) 条双向道路,其中修建第(i) 条道路的费用为 (c_i)

    Byteasar 作为 Byteland 公路建设项目的总工程师,他决定选定一个区间 [l, r],仅使用编号在该区间内的道路。他希望选择一些道路去修建,使得连通块的个数尽量少,同时,他不喜欢修建多余的道路,因此每个连通块都可以看成一棵树的结构。

    为了选出最佳的区间,Byteasar 会不断选择 (q) 个区间,请写一个程序,帮助 Byteasar 计算每个区间内修建公路的最小总费用。

    犯傻原因

    就一直在那推可能的算法,预处理什么的都想了想还是没想到怎么实现,然后就凉凉写了个暴力了……

    正解

    考虑用线段树直接维护每个区间的答案。

    注意到一个区间最多只有 (n − 1) 条树边有用,所以线段树每个节点按权值从小到大保存区间内用到的树边即可。

    合并两个区间的信息时,只需要将树边归并,然后做Kruskal 算法。

    时间复杂度 (O((m + q log m)n alpha(n)))

    T3 航海舰队

    得分情况

    期望:30

    实际:20

    改后:

    题意

    Byteasar 组建了一支舰队!他们现在正在海洋上航行着。

    海洋可以抽象成一张 (n imes m) 的网格图,其中有些位置是 “.”,表示这一格是海水,可以通过;有些位
    置是 “#”,表示这一格是礁石,不可以通过;有些位置是 “o”,表示这一格目前有一艘舰,且舰离开这
    一格之后,这一格将变为 “.”。

    这些 “o” 表示 Byteasar 的舰队,他们每天可以往上下左右中的一个方向移动一格,但不能有任何一
    艘舰驶出地图。

    特别地,Byteasar 对阵形有所研究,所以他不希望在航行的过程中改变阵形,即任何时
    刻任何两艘舰的相对位置都不能发生变化。

    Byteasar 的舰队可以航行无限长的时间,每当一艘舰经过某个格子的时候,这个格子海底的矿藏都
    将被 Byteasar 获得。

    请写一个程序,帮助 Byteasar 计算他最多可以获得多少个格子海底的矿藏?

    犯傻原因

    大概还是不会……

    写了个暴力……

    然后30-60分没来得及打完就考试结束了就放弃了……

    然后还不知道为什么无缘无故T了一个点真的服了自己

    正解

    首先抠出包围了阵形的最小矩形。

    将地图拉伸成一条链,即将第一行、第二行、第三行按顺序连接。阵形也可以用同样的方法处理。

    那么问题转化为,给定两个 01 串 S 和 T,问每个 S 中长度为 |T| 的子串是否存在一个点,两个串对应字符都是 1。

    将 T 串翻转,那么就变成了卷积的形式,FFT 计算即可。

    在 BFS 求出所有可行的位置之后,对于答案的计算,也是卷积的形式,用 FFT 加速即可。

    时间复杂度 (O(nm log(nm)))

    考试总结

    想题目的时候思路要清晰些,题目思路断了可能导致浪费很长的的一段时间。

  • 相关阅读:
    Entity Framework在WCF中序列化的问题
    OTS
    ClickHouse原理解析与应用实践--摘录
    在docker中安装ogg19
    性能测试指标记录
    docker安装oracle12c记录
    docker安装oracle19c记录
    kudu
    stm32模拟iic从机程序
    STM32启动代码注释
  • 原文地址:https://www.cnblogs.com/ztz-cpp/p/12818672.html
Copyright © 2011-2022 走看看