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)))

    考试总结

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

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/ztz-cpp/p/12818672.html
Copyright © 2011-2022 走看看