蓝桥杯刷题--python-22-dfs-bfs

2060. 奶牛选美 - AcWing题库

n,m=map(int,input().split())
map_=[]
for _ in range(n):
    tmp=list(input())
    map_.append(tmp)

mm=[(1,0),(-1,0),(0,1),(0,-1)]

def dfs(a,b,q):
    q.append((a,b))
    map_[a][b]='.'
    for i,j in mm:
        x=a+i
        y=b+j
        if (x>=0 and x<n and y>=0 and y<m and map_[x][y]=='X'):
            dfs(x,y,q)

p=[[],[]]
k=0
for i in range (n):
    for j in range(m):
        if map_[i][j]=='X':
            dfs(i,j,p[k])
            k+=1
res=float('inf')
for i in p[0]:
    for j in p[1]:
        res=min(res,abs(i[0]-j[0])+abs(i[1]-j[1]))
print(res-1) 

 167. 木棒 - AcWing题库

 

def dfs(u, cur, start):
    if u * len_ == sum_ : return True
    if (cur ==len_): return dfs(u+1,0,0)
    for i in range (start,n):
        if st[i]:continue
        if (cur+w[i]<=len_):
            st[i]=1
            if (dfs(u,cur+w[i],i+1)):return True
            st[i]=0
        if (not cur or cur+w[i]==len_):return False
        j=i=1
        while(j<n and w[i]==w[j]):j+=1
        i=j-1

n = int(input())
while (n):
    sum_ = len_ = 0
    w = list(map(int, input().split()))
    sum_ = sum(w)
    len_ = max(w)
    # print(sum_,len_)
    w.sort()
    st = [0 for _ in range(n)]
    while (True):
        if (sum_ % len_ == 0 and dfs(0, 0, 0)):
            print(len_)
            break
        len_ += 1

    n = int(input())
 

 6.最大连通 - 蓝桥云课 (lanqiao.cn)

 

import os

import sys

# 请在此输入您的代码

data='''

110010000011111110101001001001101010111011011011101001111110

010000000001010001101100000010010110001111100010101100011110 

001011101000100011111111111010000010010101010111001000010100 

101100001101011101101011011001000110111111010000000110110000 

010101100100010000111000100111100110001110111101010011001011 

010011011010011110111101111001001001010111110001101000100011 

101001011000110100001101011000000110110110100100110111101011 

101111000000101000111001100010110000100110001001000101011001 

001110111010001011110000001111100001010101001110011010101110 

001010101000110001011111001010111111100110000011011111101010 

011111100011001110100101001011110011000101011000100111001011 

011010001101011110011011111010111110010100101000110111010110 

001110000111100100101110001011101010001100010111110111011011 

111100001000001100010110101100111001001111100100110000001101 

001110010000000111011110000011000010101000111000000110101101 

100100011101011111001101001010011111110010111101000010000111 

110010100110101100001101111101010011000110101100000110001010 

110101101100001110000100010001001010100010110100100001000011 

100100000100001101010101001101000101101000000101111110001010 

101101011010101000111110110000110100000010011111111100110010 

101111000100000100011000010001011111001010010001010110001010 

001010001110101010000100010011101001010101101101010111100101 

001111110000101100010111111100000100101010000001011101100001 

101011110010000010010110000100001010011111100011011000110010 

011110010100011101100101111101000001011100001011010001110011 

000101000101000010010010110111000010101111001101100110011100 

100011100110011111000110011001111100001110110111001001000111 

111011000110001000110111011001011110010010010110101000011111 

011110011110110110011011001011010000100100101010110000010011 

010011110011100101010101111010001001001111101111101110011101

'''

def dfs(x,y):

    global res

    if (x<0 or x>29 or y<0 or y>59 or data[x][y]=='0' or check[x][y]==1):

        return

    res+=1

    check[x][y]=1

    for i in map:

        xt=i[0]+x

        yt=i[1]+y

        dfs(xt,yt)




 

map=[(-1,0),(0,-1),(1,0),(0,1)]

data=data.split()

# 检查点

check=[[0 for _ in range (60)] for _ in range (30)]

max_=0

for i in range (30):

    for j in range (60):

        if data[i][j]=='1' and check[i][j]==0:

            res=0

            dfs(i,j)

            max_=max(max_,res)

print(max_)

 5.清理水域 - 蓝桥云课 (lanqiao.cn)

 

n,m=map(int,input().split())

# 构建前戳和二维数组

dp=list([0 for _ in range (m+2)] for _ in range(n+2) )

t=int(input())

for _ in range(t):

    x1,y1,x2,y2=map(int,input().split())

    dp[x1][y1]+=1

    dp[x1][y2+1]-=1

    dp[x2+1][y1]-=1

    dp[x2+1][y2+1]+=1

res=0

for i in range (1,n+1):

    for j in range (1,m+1):

        dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+dp[i][j]

        if dp[i][j]==0:

            res+=1

print(res)

相关推荐

  1. --python-22-dfs-bfs

    2024-03-18 07:12:04       20 阅读
  2. --python-27--全球变暖-dfs-bfs

    2024-03-18 07:12:04       17 阅读
  3. --python-21

    2024-03-18 07:12:04       18 阅读
  4. --python-23

    2024-03-18 07:12:04       18 阅读
  5. --python-28-并查集

    2024-03-18 07:12:04       20 阅读
  6. --python-29-hashmap

    2024-03-18 07:12:04       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 07:12:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 07:12:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 07:12:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 07:12:04       18 阅读

热门阅读

  1. 条款13:用对象管理资源(智能指针)

    2024-03-18 07:12:04       19 阅读
  2. Excel数字签名技术总结

    2024-03-18 07:12:04       19 阅读
  3. 过多的 TIME_WAIT

    2024-03-18 07:12:04       17 阅读
  4. 第二十四章 Web Gateway 管理页面概述

    2024-03-18 07:12:04       16 阅读
  5. C语言如何进⾏字符数组的连接?

    2024-03-18 07:12:04       18 阅读
  6. Selenium笔记

    2024-03-18 07:12:04       19 阅读
  7. 使用TensorFlow 2.4进行深度学习

    2024-03-18 07:12:04       19 阅读
  8. 【C++】每日一题 219 存在重复元素

    2024-03-18 07:12:04       20 阅读