牛客周赛 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}")
相关推荐
Severus_black2 小时前
顺序表、单链表经典算法题分享(未完待续...)
c语言·数据结构·算法·链表
2201_761040592 小时前
mysql如何优化重复索引_mysql冗余索引查找与处理
jvm·数据库·python
yejqvow122 小时前
如何分析RAC启动挂起_crond与ohasd进程启动依赖链排查
jvm·数据库·python
2401_835956812 小时前
c++怎么解析二进制存储的BMP位图调色板数据及每一行的像素偏移【详解】
jvm·数据库·python
2301_815279522 小时前
JavaScript中闭包结合代理模式Proxy实现数据监听
jvm·数据库·python
我不是懒洋洋2 小时前
【经典题目】栈和队列面试题(括号匹配问题、用队列实现栈、设计循环队列、用栈实现队列)
c语言·开发语言·数据结构·算法·leetcode·链表·ecmascript
2401_837163892 小时前
mysql如何禁止用户创建新表_撤销CREATE与ALTER表权限
jvm·数据库·python
m0_640309302 小时前
如何解决phpMyAdmin导出空文件的问题_权限检查与表是否损坏排查
jvm·数据库·python
2401_837163892 小时前
Golang怎么设置响应状态码_Golang如何用WriteHeader返回404或500状态【基础】
jvm·数据库·python