竞赛讨论区 > 【题解】牛客练习赛19
头像
牛客网小运营
发布于 2018-12-27 17:19
+ 关注

【题解】牛客练习赛19

(题解由比赛出题人提供,点击右侧“本文相关内容”的题目即可开始做题)

T1 托米的简单表示法
DFS,动态规划
将括号序列考虑成一个树形结构(其实是森林),每个左括号,表示向下进入一个新节点,每个右括号,表示返回 父亲节点。
然后进行树形DP,对于每个节点,可以记录 当前节点的高度,等于所有孩子节点高度的最大值+1。 当前节点的宽度,等于所有孩子节点宽度之和。
如果当前节点,作为根节点,会有多少黑色格子,等于高度乘以宽度减去所有子节点黑色格子数之和。 参考代码https://www.nowcoder.com/acm/contest/view-submission?submissionId=27483616

T2 托米看电影
图片说明

T3 托米航空公司
搜索/递归注意到NM<=80,K<=4 也就是说直接暴力搜索,复杂度为 可以通过本题。 从实现技巧上来说,相当于是从1到nm中选取k个数字, 选取数字i时,只需要判断两个方向上是否被选。 见参考代码的第26至28行。
参考代码
https://www.nowcoder.com/acm/contest/view-submission?submissionId=27472715

T4 托米去购物
网络流 对于每个代金券建一个点 对于每个商品建一个点 建立源点S,汇点T。
S向每个代金券,连容量为代金券价格的边。 每个代金券向每个可以支付的商品连容量无穷大的边。 每个商品向T,连容量为价格的的边。 这样求出的最大流,就是最大可以用代金券支付的钱。 用所有商品的价格之和,减去最大流就是答案。 大家代码除了网络流模板部分,大同小异。
https://www.nowcoder.com/acm/contest/view-submission?submissionId=27471691

T5 托米的饮料
模拟 首先正确理解题目,注意到n只有100,直接n^2判断即可。 如果存在j!=i且a[i]==b[j],那么i可以被打开。
参考代码
https://www.nowcoder.com/acm/contest/view-submission?submissionId=27470891
如果是线性做法,统计vis[x]表示能开x品牌的有多少个,也就是有多少个i,使得b[i] =x。
如果vis[a[i]]==0(没有人能开a[i])或者vis[a[i]] ==1且a[i]==b[i](只有自己能开自己)那么就打不开。 参考代码
https://www.nowcoder.com/acm/contest/view-submission?submissionId=27469893

T6 托米搭积木
模拟 注意到第二个操作是全局增加,额外维护一个全局变量delta,表示全局增加了多少。 第二个操作2y时,执行delta+=y,即全局增加y。
第三个操作3q时,执行printa[q]+delta,即a[q]本身的值,加上全局增加的量。
第一个操作1vx时,执行a[v]=x-delta,即原本应该将a[v]修改为x,但是考虑到全局增加了delta,将a[v]修改为x- delta

其他疑问可加以下交流群(加入一个即可啦~)
牛客多校算法训练营1:453799454
牛客全国算法训练营2:330766563
牛客多校算法训练营3:934889305

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐