当前位置: 首页 > news >正文

牛客周赛 Round 26 解题报告 | 珂学家 | 0-1 BFS + 状态机DP


前言


整体评价

T3是一道0-1 BFS题, 这样时间复杂度可以控制在O(n*m), 也可以用优先队列。

T4这类题型,在牛客Round周赛系列出现好多次了,要么状态机DP,要么容斥,如果n很大,就用矩阵幂优化。


欢迎关注

珂朵莉 牛客周赛专栏

珂朵莉 牛客小白月赛专栏


A. 小红的整数操作

思路:同余分组

对k进行取模分组,同余的任意两个数,一定可以构造成一样

from collections import Countern, k = list(map(int, input().split()))
arr = list(map(int, input().split()))cnt = Counter()
for v in arr:cnt[v % k] += 1res = max(cnt.values())print (res)

B. 小红的01串

思路:奇偶分析,找规律

可以枚举最终趋同的数是0,还是1

同时相邻2数翻转,其0,1本身个数的奇偶是不改变的

这样可以发现,如果0的个数,1的个数都是奇数,必然是死局,无法构造。

t = int(input())while t > 0:t -= 1s = input()n0, n1 = 0, 0for c in s:if c == '0':n0 += 1else:n1 += 1if n0 % 2 == 1 and n1 % 2 == 1:print ("No")else:print ("Yes")

C. 小红闯沼泽地

思路:0-1 BFS,当然用优先队列寻路,也是的可以

这边采用0-1 BFS,应该时间复杂度最低

from collections import deque
# from typings import infh, w = list(map(int, input().split()))grids = []
for i in range(h):row = list(map(int, input().split()))grids.append(row)deq = deque()
deq.append((0, 0))dp = [[0x3f3f3f3f] * w for _ in range(h)]# 0-1 bfs
# 或者优先队列dp[0][0] = 0dirs = [(1, 0), (0, -1), (0, 1)]while len(deq) > 0:y, x = deq.popleft()for dy, dx in dirs:ty, tx = y + dy, x + dxif 0 <= ty < h and 0 <= tx < w:cost = 2 if grids[y][x] != grids[ty][tx] else 1if dp[ty][tx] > dp[y][x] + cost:dp[ty][tx] = dp[y][x] + costif cost == 1:deq.appendleft((ty, tx))else:deq.append((ty, tx))print (dp[h - 1][w - 1])

D. 小红的漂亮串(二)

思路:状态机DP

引入7个状态

  • any (0个red): 0
  • r: 1
  • re: 2
  • red: 3
  • r(带1个red): 4
  • re(带1个red): 5
  • red(带2个red): 6

因为n为10^6, 所以线性处理下就行了

mod = 10 ** 9 + 7n = int(input())# other: 0
# r: 1
# re: 2
# red: 3
# red, r: 4
# red, re: 5
# red, red: 6# 状态机DP
dp = [25, 1, 0, 0, 0, 0, 0]for i in range(1, n):dp2 = [0] * 7dp2[0] = (dp[0] * 25 + dp[1] * 24 + dp[2] * 24) % moddp2[1] = (dp[0] + dp[1] + dp[2]) % moddp2[2] = dp[1]dp2[3] = (dp[2] + dp[3] * 25 + dp[4] * 24 + dp[5] * 24) % moddp2[4] = (dp[3] + dp[4] + dp[5]) % moddp2[5] = dp[4]dp2[6] = (dp[5] + dp[6] * 26) % moddp = dp2print (dp[6])

写在最后

alt

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《Linux详解:深入探讨计算机基础》
  • 2023.12.30力扣每日一题——一周中的第几天
  • 六、typescript泛型使用
  • Django 后台与便签
  • 苹果电脑Dock栏优化软件 mac功能亮点
  • 基于MATLAB编程的BP神经网络土地分类,bp神经网络详细原理
  • 2023年十篇具有影响力的人工智能研究论文
  • HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片
  • SQL常见面试题
  • C++:继承(这一篇就够了)
  • css视觉格式化模型
  • JavaScript 中常用事件
  • shell打印粉色小心心、颜文字心心
  • 高效文件管理:利用文件名关键字进行归类,批量移动文件
  • Cypress安装与使用教程(3)—— 软测大玩家
  • 【RocksDB】TransactionDB源码分析
  • Git 使用集
  • github从入门到放弃(1)
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript HTML DOM
  • JavaScript设计模式之工厂模式
  • JDK 6和JDK 7中的substring()方法
  • js如何打印object对象
  • Laravel 菜鸟晋级之路
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • 坑!为什么View.startAnimation不起作用?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​LeetCode解法汇总518. 零钱兑换 II
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #13 yum、编译安装与sed命令的使用
  • #Lua:Lua调用C++生成的DLL库
  • #pragma once
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (done) 两个矩阵 “相似” 是什么意思?
  • (LeetCode C++)盛最多水的容器
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (四)汇编语言——简单程序
  • (转)setTimeout 和 setInterval 的区别
  • (转载)虚函数剖析
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .ai域名是什么后缀?
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET NPOI导出Excel详解
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [android学习笔记]学习jni编程
  • [BSGS算法]纯水斐波那契数列
  • [C#]手把手教你打造Socket的TCP通讯连接(一)