牛客周赛 Round 140

小红的区间计数

考点:模拟

思路:

直接一个循环,判断区间内有多少个跟a,b,c都不同的数。

复杂度:O(n)

python 复制代码
import sys
input = sys.stdin.readline
a,b,c,l,r=map(int,input().split())
cnt=0
for i in range(l,r+1):
    if i!=a and i!=b and i!=c:
        cnt+=1
print(cnt)

小红的牛魔

考点:栈

思路:

题目说的是能否删掉对应的niu或者mo的子串,那么我们直接用栈,匹配到哪一个就开删就行了。最后再判断栈是不是空的,如果是空的那就是Yes,否则就是No。

复杂度:O(n)

python 复制代码
import sys
input = sys.stdin.readline
n=int(input())
s=input().strip()
p=[]
for v in s:
    if v=='u' and len(p)>=2 and p[-2]=='n' and p[-1]=='i':
        p.pop()
        p.pop()
    elif v=='o' and len(p)>=1 and p[-1]=='m':
        p.pop()
    else:
        p.append(v)
if len(p)==0:
    print("Yes")
else:
    print("No")

小红的矩阵计数

考点:模拟

思路:

他说了每个格子只有三种状态,又是每次只看2*2的格子内的,于是我们可以一个个找每个2*2的格子里面有多少个满足条件的L即可。

复杂度:O(n*m)

python 复制代码
import sys
input = sys.stdin.readline
n,m=map(int,input().split())
a=[list(input().strip()) for _ in range(n)]
cnt=0
for i in range(n-1):
    for j in range(m-1):
        c1=a[i][j]
        c2=a[i][j+1]
        c3=a[i+1][j]
        c4=a[i+1][j+1]
        if c1!=c2 and c2!=c3 and c1!=c3:
            cnt+=1
        if c1!=c2 and c2!=c4 and c1!=c4:
            cnt+=1
        if c1!=c3 and c3!=c4 and c1!=c4:
            cnt+=1
        if c2!=c3 and c3!=c4 and c2!=c4:
            cnt+=1
print(cnt)import sys
input = sys.stdin.readline
n,m=map(int,input().split())
a=[list(input().strip()) for _ in range(n)]
cnt=0
for i in range(n-1):
    for j in range(m-1):
        c1=a[i][j]
        c2=a[i][j+1]
        c3=a[i+1][j]
        c4=a[i+1][j+1]
        if c1!=c2 and c2!=c3 and c1!=c3:
            cnt+=1
        if c1!=c2 and c2!=c4 and c1!=c4:
            cnt+=1
        if c1!=c3 and c3!=c4 and c1!=c4:
            cnt+=1
        if c2!=c3 and c3!=c4 and c2!=c4:
            cnt+=1
print(cnt)

小红的排序(easy)

考点:并查集

思路:

图论中有一个性质,只要再同一个连通块中,我们最后都能换到相应的位置里去,于是问题就转换成判断当前位置和当前位置的值是否处于同一个连通块中。

复杂度:O(n)

python 复制代码
import sys
import math
input = sys.stdin.readline
sys.setrecursionlimit(300000)
t=int(input())
for _ in range(t):
    n,x,y=map(int,input().split())
    a=list(map(int,input().split()))
    parent=list(range(n+1))
    def find(i):
        if i ==parent[i]:
            return i
        parent[i]=find(parent[i])
        return parent[i]
    def union(i,j):
        root_i=find(i)
        root_j=find(j)
        if root_i!=root_j:
            parent[root_i]=root_j

    for i in range(1,n-x+1):
        union(i,i+x)
    for i in range(1,n-y+1):
        union(i,i+y)

    ok=True
    for i in range(n):
        val=a[i]
        if find(i+1)!=find(val):
            ok=False
            break
    if ok:
        print("Yes")
    else:
        print("No")

小红的三角形构造

考点:构造

思路:

一个数学问题,当x<=2的时候直接输出no,因为题目要是直角三角形。

当x大于2的时候,不管x给的是奇数还是偶数,我们都默认把它放在直角边来进行构造,现在我们在进行分类讨论:

当x是奇数的时候,现在就变成了。于是我们可以设c-b为1,c+b为,然后联立解方程即可。

当x是偶数的时候,现在就变成了。于是我们可以设c-b为2,c+b为,然后联立解方程即可。

复杂度:O(n)

python 复制代码
import sys
import math
input = sys.stdin.readline
t=int(input())
for _ in range(t):
    x=int(input())
    if x<=2:
        print("No")
    else:
        print("Yes")
        if x%2==0:
            print(f"{x} {(x**2+4)//4} {(x**2-4)//4}")
        else:
            print(f"{x} {(x ** 2 + 1) // 2} {(x ** 2 - 1) // 2}")
相关推荐
悠仁さん3 小时前
list 链式表基本功能模拟实现(双向有头指针循环链表)
c语言·数据结构·链表·list
吴可可1233 小时前
AutoCAD 2024搭配C#开发最佳实践
算法
郝学胜-神的一滴3 小时前
系统设计 014:缓存深度实战:如何用 Cache 优雅优化数据库读写?
java·数据库·python·缓存·oracle·php·软件构建
Cloud_Shy6183 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第三章 Item 17 - 20)
开发语言·笔记·python
Stick_ZYZ3 小时前
从 Prompt 到 Context Engineering:Agent 真正稳定的关键
大数据·人工智能·算法·ai·prompt
ZHW_AI课题组3 小时前
使用Stable Diffusion v1.5文本引导与无分类器引导(CFG)算法实现条件生成图片
人工智能·python·算法·机器学习·stable diffusion
xxwxx__3 小时前
栈(Stack)详解:概念、实现与避坑指南
c语言·数据结构
盼小辉丶3 小时前
OpenCV-Python实战(25)——基于深度传感器与凸性分析打造实时手势识别系统
人工智能·python·opencv·计算机视觉
金融大 k3 小时前
行情数据接入 MCP:Claude Code / Cursor 工具描述怎么写才不踩坑
人工智能·python·websocket·行情 api
黎阳之光3 小时前
数字孪生赋能智慧油站建设|黎阳之光全场景可视化安防管控平台落地应用
大数据·物联网·算法·安全·数字孪生