牛客小白月赛75题解

前言

难了,d会被误以为能dp,d和e应该其中一个放f,毙掉另一个,f代码题。d应该往后挪一个身位。

以后应该也不会这样。这场一开始交给审题人,没意见。内测,大概只有讨厌鬼说一些,炸鸡块君录视频的时候才说难。这样的场放出来大概原因就是我严重低估后面题难度,没有几个人提出异议。(内测还过得挺多......)

A. 上班

签到,输出x+yx+yx+zx+z的最小值。

代码: https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62544974

B. 崇拜

假设难度值大于yy的知识点有uu个。 先讲解最难的知识点,那么最大崇拜值就是3u3u,输出3u3u。 如果难度小于xx的知识点放到前面,那么最大崇拜值可能小于3u3u

代码: https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62545047

C. 崇拜

递归或循环

假设已经得到了x-1级好豆子 将x-1级好豆子复制到右下角,变成下面布局:

... ...

... x-1级好豆子

将第一二三份x-1级好豆子取反变成x-1级坏豆子,并且复制到左上、右上、左下:

x-1级坏豆子 x-1级坏豆子

x-1级坏豆子 x-1级好豆子

这样就得到x级好豆子。

代码: https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62545050

D. 矩阵

有个坑(?),可能会误以为只有向右和向下走,然后写dp。(特意加粗了上下左右)

题目设定,走过相邻的两个格子的字符是不相同,即便相同,那也要变成不同才走过去。

因此可以发现:

如果s1,1s_{1,1}是'0',走过的格子形成的字符串应该是"0101010101010......"。

如果s1,1s_{1,1}是'1',走过的格子形成的字符串应该是"1010101010101......"。

upd:假设在某个格子(x,y)(x,y)走出去兜兜转转再走回来(x,y)(x,y),耗费的步数是偶数步(偶数距离的两个格子应该是相同字符),因此除了第一进入(x,y)(x,y)可能会将(x,y)(x,y)改变,如果以后还要走到(x,y)(x,y),不会改变(x,y)(x,y)。多次走进不会改变的(x,y)(x,y)会更多花费时间,所以最多进入一次(x,y)(x,y)

可以发现,走到(x,y)(x,y)(x,y)(x,y)(1,1)(1,1)的曼哈顿距离(x+y2)(x+y-2)如果是奇数,sx,ys_{x,y}应该和s1,1s_{1,1}不相同,相同需要多花费1单位时间修改sx,ys_{x,y};否则如果是偶数,sx,ys_{x,y}应该和s1,1s_{1,1}相同,不相同需要多花费1单位时间修改sx,ys_{x,y}

跑一个(1,1)(1,1)(n,m)(n, m)的最短路,即可得到答案。

对于形如下图的路径,路径上的边的边权都是1,其它边权都是2。就能卡掉缺少向上的。 alt

代码: https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62545055

E. 数数

动态规划:

状态表示,dpi,jdp_{i,j}表示当前数组长度为ii,且当前数组的和为i×ji\times j

状态转移,dpi,jdp_{i,j}转移到dpi+1,kdp_{i+1,k},需要满足 1(i+1)×ki×jm1 \leq (i+1)\times k - i \times j \leq m。含义就是dpi,jdp_{i,j}代表数组末尾增加一个整数(i+1)×ki×j(i+1)\times k - i \times j

答案,i=1mdpn,i\sum_{i=1}^{m} dp_{n,i}

时间复杂度:

(以下mm写成nn) 枚举i,j,ki,j,kkk只枚举合法的kk

对于每个iikk的枚举量是ni\frac{n}{i}iikk这两重循环的复杂度是调和级数nlognnlogn,再乘以kk的枚举量。

总复杂度n2lognn^2logn

代码: https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62546564

n2n^2怎么写呢?

F. 打牌

经评论区大佬暗示,我本地测试,发现所有情况10轮都到不了......属实是诈了大家,把自己也诈了.....

因此我感觉最(?)好的做法是记忆化搜索。


下面代码是刚造出这题时的代码。

找出所有局面的状态表示(10001000种),再找出状态转移(大约23002300),复杂度是(2300+1000)×105(2300+1000)\times 10^5

代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62545302

全部评论
事实上,F题的游戏结束前最多只有6种本质不同的游戏状态 (所有卡牌的字母轮换后视作同一种状态),加上胜利、失败两种状态,整个游戏的状态转移可以用一个8*8矩阵描述,加上快速幂复杂度可以达到O(log(n))。
1 回复 分享
发布于 2023-06-30 23:01 湖南
佬,教教,这个跟曼哈顿距离怎么联系的,题目的意思不是只有修改上下左右,并且走过去边权是2,为什么能用曼哈顿距离判断边权
点赞 回复 分享
发布于 2023-06-30 22:06 安徽
D题的优先队列的可以不嵌套定义直接priority_queue< PII>来做吗(弱
点赞 回复 分享
发布于 2023-07-01 09:47 湖北
F题数据水了,我开1e4*10*10*10也能过(需要以后数组能够开1e8)https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62549751
点赞 回复 分享
发布于 2023-07-01 13:25 广东
d题那个priority_queue<pair<int, PII>>队列第一个参数int是干什么的呀,可以改成priority_queue<pair<int,int>>嘛,我改了一直过不去
点赞 回复 分享
发布于 2023-07-01 14:24 新疆
佬,问一下这个D题可以用双端队列做吗
点赞 回复 分享
发布于 2023-07-01 15:32 山东
佬,教,求。D题为啥不是dp啊?
点赞 回复 分享
发布于 2023-07-16 11:02 河南

相关推荐

评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务