牛客小白月赛105 (Python题解)

比赛链接:点击传送

A-lz的吃饭问题

代码:

a, b = map(int,input().split())
c, d = map(int,input().split())
print("gzy") if a*b >= c*d else print("lz")

B-lz的数字问题

代码:

def func(a1, b1):
a_int, a_frac = (a1 + '.0').split('.')[:2]
b_int, b_frac = (b1 + '.0').split('.')[:2]
if a_int != b_int: return "NO"
a_frac = (a_frac + "000000")[:6]
b_frac = (b_frac + "000000")[:6]
return "YES" if a_frac == b_frac else "NO"
a, b = input().split()
print(func(a, b))

C-lz的蛋挞问题

1.问题重述:

1.1.背景:

​ 一个两行 n 列的盒子中有两种物品:蛋挞(.)和奶贝(x),蛋挞之间如果在上下左右四个方向相邻,就可以连通,连通块是指一组可以相互连通的蛋挞。

1.2.要求:

​ 可以吃掉一个蛋挞,并在原位置放置奶贝,找出吃掉后能改变蛋挞连通块数量的蛋挞个数。

2.求解思路:

2.1.核心思路:

  • 遍历每个蛋挞位置

  • 判断吃掉该蛋挞是否会改变连通块数量

  • 设计4种判断条件

2.2.四种判断条件详解:

  1. 左侧连通性改变

    j > 0 and m[i][j] == m[1-i][j] == m[i][j-1] != m[1-i][j-1]

    ​ 检查左侧相邻蛋挞是否形成特定连通模式,同行和对行的蛋挞值相同,与左下/左上蛋挞值不同

  2. 右侧连通性改变

    j + 1 < n and m[i][j] == m[1-i][j] == m[i][j+1] != m[1-i][j+1]

    ​ 检查右侧相邻蛋挞是否形成特定连通模式,同行和对行的蛋挞值相同,与右下/右上蛋挞值不同

  3. 三连通情况

    j > 0 and j + 1 < n and m[i][j-1:j+2] == '.' * 3 and m[1-i][j] == 'x'

    ​ 当前行有连续三个蛋挞,对应行为奶贝

  4. 孤立点情况

    (j == 0 or m[i][j-1] == 'x') and (j + 1 == n or m[i][j+1] == 'x') and m[1-i][j] == 'x'

    ​ 当前蛋挞左右被奶贝包围,对应行为奶贝

3.代码:

n = int(input())
m = [input() for _ in range(2)]
ans = 0
for i in range(2):
for j in range(n):
if m[i][j] == 'x':
continue
conditions = [
j > 0 and m[i][j] == m[1-i][j] == m[i][j-1] != m[1-i][j-1],
j + 1 < n and m[i][j] == m[1-i][j] == m[i][j+1] != m[1-i][j+1],
j > 0 and j + 1 < n and m[i][j-1:j+2] == '.' * 3 and m[1-i][j] == 'x',
(j == 0 or m[i][j-1] == 'x') and (j + 1 == n or m[i][j+1] == 'x') and m[1-i][j] == 'x'
]#四种判断条件
ans += any(conditions)
print(ans)

D-lz的染色问题

1.问题重述:

1.1.背景:

​ 花园包含 n 朵花,每朵花有自己的颜色,在接下来的 m 天里,每天观察两朵花,如果观察的两朵花颜色不同,lz会生气。

1.2.要求:

​ 需要选择最少数量的花进行重新染色,让 lz 在 m 天观察中不会生气

2.求解思路:

2.1.核心思路:

  • 使用并查集将需要颜色相同的花分组

  • 对每个连通分量,找出出现最多的颜色

  • 计算需要染色的花的数量

2.2.详细解题步骤:

  1. 初始化并查集

    ​ 将需要颜色相同的花合并到同一个集合

  2. 分组统计

    ​ 找出每个连通分量的根节点,将同一连通分量的花分到同一组

  3. 计算最小染色数

    ​ 对每个连通分量,统计出现最多的颜色数量,用连通分量的总花数减去最多颜色的数量,得到需要染色的最少花数

3.代码:

class UnionFind:
def __init__(self, n):
self.far = list(range(n + 1))
self.rank = [0] * (n + 1)
def find(self, x):
if self.far[x] == x:
return x
self.far[x] = self.find(self.far[x])
return self.far[x]
def unite(self, x, y):
x = self.find(x)
y = self.find(y)
if x == y:
return
if self.rank[x] > self.rank[y]:
self.far[y] = x
else:
self.far[x] = y
if self.rank[x] == self.rank[y]:
self.rank[y] += 1
def main():
n, m = map(int, input().split())
uf = UnionFind(n)
c = [0] + list(map(int, input().split()))# 读取颜色
a = []
for _ in range(m):# 处理边的连接
x, y = map(int, input().split())
uf.unite(x, y)
a.extend([x, y])
cnt = 0
mp = {}
G = {}
for x in a:
root = uf.find(x)
if root not in mp:
cnt += 1
mp[root] = cnt
if mp[root] not in G:
G[mp[root]] = set()
G[mp[root]].add(x)
ans = 0
for i in range(1, cnt + 1):
s = {}
ma = 0
for x in G[i]:
s[c[x]] = s.get(c[x], 0) + 1
ma = max(ma, s[c[x]])
ans += len(G[i]) - ma
print(ans)
main()

E- lz的括号问题

1.问题重述:

1.1.背景:

​ 给定一个由 n 对括号组成的字符串,字符串仅由字符 () 组成。每对括号需要按照出现的顺序进行编号。

1.2.要求:

​ 计算每对括号在删除之前最多可以删除多少对括号。如果字符串中的括号无法完全匹配,则输出 -1

2.求解思路:

​ 使用一个计数器 len_ 来跟踪当前的括号深度。每遇到一个 (,计数器加一;每遇到一个 ),计数器减一。如果 len_ 变为负值,说明有多余的 ),此时输出 -1 并结束程序。若 len_ 不为零,说明括号没有完全匹配,输出 -1

​ 用一个列表 l 来存储每个 ( 的编号。每当遇到一个 ( 时,将当前的深度记录到列表中。使用 n - len_ 来表示当前括号可以在删除之前删除的对数。

3.代码:

n = int(input())
s = input().strip()
l = []
len_ = 0
for i in s:
len_ += 1 if i == "(" else -1
if len_ < 0:
print(-1)
exit()
if i == "(":
l.append(n - len_)
print(" ".join(map(str, l)))

祝ACCCCCCC...

牛客小白月赛105 (Python题解)的更多相关文章

  1. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...

  2. 【牛客小白月赛21】NC201605 Bits

    [牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ...

  3. 牛客小白月赛16 小石的妹子 二分 or 线段树

    牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想 ...

  4. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  5. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  6. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

  7. 牛客小白月赛18 Forsaken给学生分组

    牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 ​ Forsaken有 ...

  8. 牛客小白月赛18 Forsaken喜欢数论

    牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 ​ Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...

  9. 牛客小白月赛19 E 「火」烈火燎原 (思维,树)

    牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  10. 【牛客小白月赛21】NC201604 Audio

    [牛客小白月赛21]NC201604 Audio 题目链接 题目大意: 给出三点 ,求到三点距离相等的点 的坐标. 解析 考点:计算几何基础. 初中蒟蒻表示不会什么法向量.高斯消元..qwq 方法一: ...

随机推荐

  1. 基于 Quanto 和 Diffusers 的内存高效 transformer 扩散模型

    过去的几个月,我们目睹了使用基于 transformer 模型作为扩散模型的主干网络来进行高分辨率文生图 (text-to-image,T2I) 的趋势.和一开始的许多扩散模型普遍使用 UNet 架构 ...

  2. pc 移动端 双端切换-路由判断

    该封装主要以分类形式,实现对路由的简易区分.便于项目管理. 创建好项目,勾选路由插件,会自动生成 router文件夹与index.ts . index.ts 初始内容 创建项目 自动生成的router ...

  3. IDEA maven 项目 如何获取项目离线运行所需的全部依赖( .m2格式)

    背景:maven项目要将整个项目的依赖移植到某无法联网服务器进行测试,需要项目离线运行所需的全部依赖 步骤: 1. 首先需要有项目源码,解压后,使用IDEA Open Project 2. 在Sett ...

  4. maven 打包 pom build

    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframew ...

  5. 【YashanDB知识库】YAS-02024 lock wait timeout, wait time 0 milliseconds

    [标题]错误码处理 [问题分类]锁等待超时 [关键字]YAS-02024 [问题描述]执行语句时候,因锁等待超时执行语句失败 [问题原因分析]数据库默认锁等待时间为0秒,如果执行语句存在锁等待过长会执 ...

  6. 使用 `Roslyn` 分析器和修复器 对异步方法规范化返回Async结尾

    之前写过一篇使用修复器帮助添加头部注释文本的功能,今天使用Roslyn的代码修复器对异步返回方法规范化的功能 实现分析器 首先需要实现分析器,使用RegisterSyntaxNodeAction,分析 ...

  7. JavaScript – ES6-ES2023 大杂烩

    前言 一年半没有写 JS 了, 今天开始来个大复习, 顺便把这么多年零零散散的知识点做成笔记. 练练字. ES 3, 5, 6, 2017, 2018... ES 6 等于 ES2015 ES 7 等 ...

  8. SpringMVC —— RESTful案例

    案例:基于RESTful页面数据交互            

  9. 【赵渝强老师】MongoDB管理用户的认证机制

    一.MongoDB用户认证机制简介 为了认证客户端,你必须要添加一个对应的用户到MongoDB.基本的步骤分为以下几步: 用户管理接口:db.createUser()方法可以创建一个用户,添加完成后可 ...

  10. WPF下使用FreeRedis操作RedisStream实现简单的消息队列

    Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息, ...