第十四届蓝桥杯模拟赛第三期(Python)

news2025/1/16 18:51:45

写在前面

  1. 包含本次模拟赛的10道题题解
  2. 能过样例,应该可以AC
  3. 若有错误,欢迎评论区指出
  4. 本次题目除了最后两题有些难度,其余题目较为简单,我只将代码和结果给出,如果不能理解欢迎私信我,我会解答滴。

 

start = 2022 

def check(num) : 
    
    s = str(hex(num))[2:] 
    for i in range(len(s)) : 
        if ord(s[i]) < ord('a') or ord(s[i]) > ord('f') : return False 
    return True 

while 1 : 
    start += 1 
    if check(start) : break 
    
print(start)

 #没代码,直接草稿纸手推就行了


 

import datetime 

start = datetime.date(1900,1,1) 
end = datetime.date(9999,12,31) 
diff = datetime.timedelta(1) 

def check(num) : 
    
    year, month, day = num.split('-')
    if sum(list(map(int,year))) == sum(list(map(int,month))) + sum(list(map(int,day))) : return True 
    return False 
    
ans = 0 
while start <= end : 
    if check(str(start)) : ans += 1 
    if start == end : break 
    start += diff 

print(ans)

 


s = '99,22,51,63,72,61,20,88,40,21,63,30,11,18,99,12,93,16,7,53,64,9,28,84,34,96,52,82,51,77'

lst = list(map(int,s.split(',')))

ans = 0 

for i in range(29) : 
    for j in range(i + 1, 30) : 
        if lst[i] * lst[j] >= 2022 : ans += 1 

print(ans) 

 


s = '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 check(x, y) : 
    
    res = 0 
    queue = [(x, y)] 
    
    while queue : 
        nx, ny = queue.pop(0) 
        res += 1 
        st[nx][ny] = False 
        
        for i, j in [(1,0), (-1,0), (0,1), (0,-1)] : 
            px = nx + i ; py = ny + j 
            if 0 <= px < 30 and 0 <= py < 60 and Map[px][py] == '1' and st[px][py] : 
                queue.append((px,py)) 
    
    return res 
    

Map = [[0] * 60 for i in range(30)]

for i in range(30) :
    for j in range(60) :
        Map[i][j] = s[i*30+j]
        
st = [[True] * 60 for i in range(30)] 

ans = 0 
for i in range(30) : 
    for j in range(60) : 
        if Map[i][j] == '1' and st[i][j] : 
            ans = max(ans, check(i, j)) 
            
print(ans)

 


x = int(input())
n = int(input()) 

x = x + (n % 7)

print(x if x <= 7 else x - 7)

 

 

from math import sqrt, pi

W,H,n,r = map(int,input().split()) 

def get_dist(x1, y1, x2, y2) : 
    
    dx = x1 - x2 
    dy = y1 - y2 
    
    return sqrt(dx * dx + dy * dy) 

def check(x, y) : 

    for i, j in loc : 
        if get_dist(x, y, i, j) <= r : return True 
    
    return False 

loc = [] 
for i in range(n) : 
    x,y = map(int,input().split()) 
    loc.append((x,y))

ans = 0 
for i in range(W + 1) : 
    for j in range(H + 1) : 
        if check(i, j) : ans += 1 
        
print(ans)

 

 

 


N,M = map(int,input().split()) 
T = int(input())

Map = [[True] * (M + 1) for i in range(N + 1)] 
for _ in range(T) : 
    r1,c1,r2,c2 = map(int,input().split()) 
    for i in range(r1, r2 + 1) : 
        for j in range(c1, c2 + 1) : 
            Map[i][j] = False 
            
ans = 0 
for i in range(1, N + 1) : 
    ans += Map[i][1:].count(True)
    
print(ans)

 

这道题是经典的滑雪道记忆化搜索的题目,我写过一篇很详细的题解,请自行参考。

蓝桥杯/洛谷 : 最长滑雪道/滑雪 + 扩展题目(记忆化搜索 Python)_蓝桥杯滑雪_正在黑化的KS的博客-CSDN博客


N,M = map(int,input().split()) 
Map = [] 

for i in range(N) : 
    Map.append(list(map(int,input().split()))) 

dist = [[-1] * M for i in range(N)] 

def find(x, y) : 
    if dist[x][y] != -1 : return dist[x][y]
    
    dist[x][y] = 0 
    for i,j in [(1,0),(0,1),(-1,0),(0,-1)] : 
        px = x + i ; py = y + j 
        if 0 <= px < N and 0 <= py < M and Map[px][py] < Map[x][y] :  
            dist[x][y] = max(dist[x][y], find(px, py)) 
    dist[x][y] += 1 
    
    return dist[x][y] 
    
ans = 0 
for i in range(N) : 
    for j in range(M) : 
        ans = max(ans, find(i, j)) 
        
print(ans) 

 

重点题目来了!(敲黑板 

有几位小伙伴私信问我这道题目该怎么解,我先说明我是用线段树解决的,但我认为应该还有别的解法,只是我目前还没有想到,如果有与我解法不同的方法可以放在评论区,大家一起讨论哈。

题目大意就是说,对于每一个点i而言,它的前 k 个点到后 k 个点这段 2k + 1 的区间中,最小数是多少。(区间边界是 0 ~ n - 1)

首先先说下超时做法,我们很容易想到,可以依次枚举每个点i,对每个点i再枚举它的

2k + 1 这个区间,维护一个最小值。这样的做法最坏情况下的时间复杂度是O(n^{2}),对于这道题而言,n最大有10^6,因此肯定会超时。

正解如下,其实本质上这道题目是一道线段树的简化版,因为只涉及区间查询,不涉及区间修改,所以建树之后每次按要求查询区间就可以了。线段树的理论有些复杂,这里就不再给大家详细讲了,网上有很多篇关于线段树优秀的讲解。大家可以自行翻阅,如果已经理解了线段树还是不能看懂我的代码的话,可以来私信我。

Python3代码: 


N = 10 ** 6 + 10 
INF = float('inf')

n = int(input()) 
w = list(map(int,input().split())) 

class Node : 
    def __init__(self, l, r, v) : 
        self.l = l  
        self.r = r  
        self.v = v 
        
tr = [None] * (4 * N) 


def pushup(u) : 
    tr[u].v = min(tr[u << 1].v, tr[u << 1 | 1].v) 
    
def build(u, l, r) :
    if l == r : tr[u] = Node(l, r, w[r]) 
    else : 
        tr[u] = {l, r, INF}  
        mid = l + r >> 1 
        build(u << 1, l, mid) ; build(u << 1 | 1, mid + 1, r) 
        pushup(u) 
        
def query(u, l, r) :
    if l <= tr[u].l and r >= tr[u].r : return tr[u].v 
    
    mid = tr[u].l + tr[u].r >> 1 
    res = INF 
    if l <= mid : res = min(res, query(u << 1, l, r))
    if r > mid : res = min(res, query(u << 1 | 1, l, r)) 

    return res 

build(1, 0, n - 1) 

k = int(input()) 
for i in range(n) : 
    print(query(1, max(0, i - k), min(n - 1, i + k)), end = ' ') 
    
    

Tip: 考虑到很多小伙伴是C++组选手,我这里也贴一份C++的代码,以供参考。

Python写线段树真的有点反人类..

C++代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std ;

typedef long long LL ; 

const int N = 1e6 + 10 ; 
int n, k ; 
int w[N] ; 

struct Node 
{
    int l, r, mn ; 
}tr[4 * N] ; 

void pushup(int u) 
{
    tr[u].mn = min(tr[u << 1].mn, tr[u << 1 | 1].mn) ; 
}

void build(int u, int l, int r) 
{
    if (l == r) tr[u] = {l, r, w[r]} ; 
    else 
    {
        tr[u] = {l, r} ; 
        int mid = l + r >> 1 ; 
        build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r) ; 
        pushup(u) ; 
    } 
}

int query(int u, int l, int r) 
{
    if (l <= tr[u].l && r >= tr[u].r) return tr[u].mn ; 
    
    int mid = tr[u].l + tr[u].r >> 1 ;
    int res = 0x3f3f3f3f ;  
    if (l <= mid) res = min(res, query(u << 1, l, r)) ; 
    if (r > mid) res = min(res, query(u << 1 | 1, l, r)) ; 

    return res ;
}

int main() 
{
    ios::sync_with_stdio(false) ; 
    cin >> n ; 
    for (int i = 0 ; i < n ; i ++ ) 
        cin >> w[i] ;     

    build(1, 0, n - 1) ; 
    
    cin >> k ; 
    for (int i = 0 ; i < n ; i ++ ) 
        cout << query(1, max(0, i - k), min(n - 1, i + k)) << " " ; 

    return 0 ; 
}

写在最后 

还有一个月左右省赛就要开始了,预祝大家能有个圆满且理想的成绩。

如果我的文章对你有一些帮助,可以留下你的👍

谢谢你的阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring面试专题

讲师&#xff1a;邓澎波 Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 1.1 Spring的发展历程 先介绍Spring是怎么来的&#xff0c;发展中有哪些核心的节点&#xff0c;当前的最新版本是什么等 通过上图可以比较清晰的看到Spring的各个时间版本…

阿赵的MaxScript学习笔记分享九《可编辑多面体的操作》

大家好&#xff0c;我是阿赵。这是MaxScript学习笔记分享的第九篇&#xff0c;可编辑多面体的操作。不知不觉写了这么多篇了&#xff0c;应该还有几篇就写完了。自己给自己加一下油。 在3DsMax里面如果需要建模&#xff0c;一般使用到的塌陷方式有3种&#xff0c;可编辑的网格、…

P6专题:P6 EPPM和PPM基本概念

目录 引言 Oracles Primavera P6 Enterprise Project Portfolio Management&#xff08;P6 EPPM&#xff09; Oracles Primavera P6 Professional Project Management 引言 Oracle Primavera系列软件专注于项目密集型企业&#xff0c;其整个项目生命周期内所有项目的组合管…

一些Linux内核内存性能调优笔记!

前言 在工作生活中&#xff0c;我们时常会遇到一些性能问题&#xff1a;比如手机用久了&#xff0c;在滑动窗口或点击 APP 时会出现页面反应慢、卡顿等情况&#xff1b;比如运行在某台服务器上进程的某些性能指标&#xff08;影响用户体验的 PCT99 指标等&#xff09;不达预期…

JavaEE学习笔记-SpringBoot快速上手、部分注解解释

SpringBoot快速上手 一、快速创建SpringBoot应用1.1利用IDEA提供的Spring Initializr创建Spring Boot应用1.2Spring Boot生成的项目结构介绍1.3初步测试后端是否OK(建立一个controll类)二、热部署2.1 添加依赖2.2 Setting处项目自动化设置2.3 具体项目设置2.4 待选步骤三、注…

渗透five86-3

本机kali ip为:192.168.56.104,靶机ip用nmap -sP或者arp-scan -l去查看靶机ip为192.168.56.121输入nmap -sS -sV -T5 -A 192.168.56.121 #进行靶机端口信息收集发现仅有80端口&#xff0c;同时发现了robots.txt文件&#xff0c;打开web端发现是Drupal 7的框架&#xff0c;之前的…

【蓝桥杯集训12】DFS(3 / 5)

目录 842. 排列数字 - DFS按位置枚举 843. n-皇后问题 - DFS按行枚举 165. 小猫爬山 - DFS枚举小猫 1209. 带分数 - DFS 3502. 不同路径数 - 842. 排列数字 - DFS按位置枚举 活动 - AcWing 题目&#xff1a; 给你一个整数n 要求将1~n的所有排列情况列出 比如&#xff1a…

stm32hal库硬件IIC使用OLED(SSD1306)

其实OLED算是非常常用的一个小模块了&#xff0c;之前用的一直用的是软件模拟的IIC&#xff0c;总的来说感觉还是都是有点"答辩"&#xff0c;经常莫名其妙的就点不亮的&#xff0c;用了cubemx之后硬件iic配置就非常方便了&#xff0c;还是想用硬件iic&#xff0c;一方…

C++ 常用命令行开发工具(Linux)

文章目录1、简介2、gcc / g2.1 system&#xff08;执行shell 命令&#xff09;2.2 popen&#xff08;建立管道I/O&#xff09;2.3 vforkexec&#xff08;新建子进程&#xff09;3、clang3.1 下载和安装clang3.2 clang和gcc比较3.2.1 gcc3.2.2 clang3.2.3 LLVM4、make4.1 例子14…

DNS作用及工作原理

文章目录1. DNS作用2 DNS 三个组成部分&#xff1a;2.1 客户端2.2Local DNS2.3 权威域 DNS 服务器3 工作过程1. DNS作用 DNS 分为 Client 和 Server&#xff0c;Client 扮演发问的角色&#xff0c;也就是问 Server 一个 Domain Name&#xff0c;而 Server 必须要回答此 Domain…

MySQL实战解析底层---深入浅出索引

目录 前言 索引的常见模型 InnoDB 的索引模型 索引维护 后言 覆盖索引 最左前缀原则 索引下推 前言 一句话简单来说&#xff0c;索引的出现其实就是为了提高数据查询的效率&#xff0c;就像书的目录一样一本500 页的书&#xff0c;如果你想快速找到其中的某一个知识点&…

CentOS安装RStudio-Server的方法

R语言是生信分析、数据挖掘最常用最好用的软件之一&#xff0c;得到了广大生信工程师、数据分析师的厚爱。Rstudio 是 R 的集成开发环境&#xff0c;使得R语言的用户体验更强。一般个人电脑&#xff08;PC, Personal Computer&#xff09;使用单机版的 Rstudio 即可&#xff0c…

I.MX6ULL_Linux_系统篇(22) kernel移植

原厂 Linux 内核编译 NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的&#xff0c;所以我们肯定是以 I.MX6ULL EVK 开发板为参考&#xff0c;然后将 Linux 内核移植到 I.MX6U-ALPHA 开发板上的。 配置编译 Linux 内核 和uboot一样&#xff0c;在编…

C#/Unity------抽象类与接口(一篇文章彻底搞懂...)

抽象类/接口以及区别 SUMMARY: 具体类→抽象类→接口&#xff1a;越来越抽象&#xff0c;内部实现的东西越来越少 一、抽象类 抽象类是未完全实现逻辑的类 抽象类为复用而生&#xff0c;专门用作基类 封装确定的&#xff0c;开放不确定的&#xff0c;推迟到合适的子类来实现…

初识STM32单片机

目录 初识STM32单片机 什么是单片机&#xff1f; STM系列单片机命名规则 STM32F103C8T6单片机简介 标准库与HAL库区别 通用输入输出端口GPIO 什么是GPIO&#xff1f; 定义 命名规则 内部框架图 推挽输出与开漏输出 如何点亮一颗LED灯 编程实现点灯 按键点亮LED灯…

【JavaWeb】CSS基础知识:引入方式 + 选择器

目录 CSS引入 行内样式表 内部样式表 外部样式表 CSS选择器 基础选择器 标签选择器 类选择器 ID选择器 通配符选择器 复合选择器 后代选择器 子选择器 CSS引入 CSS的引入有三种&#xff0c;三种的优缺点各不相同。 行内样式表 <!-- 行内样式表 --><!--…

Splunk Add-on 碰到证书SSL问题

最近Splunk add-on 在连接对方app 的 时候,经常报SSL的错: ERROR AdminManagerExternal - Unexpected error "<class requests.exceptions.SSLError>" from python handler: "HTTPSConnectionPool(host=app.com, port=443): Max retries exceeded with…

flex布局方式让最后一个(或第二个...n)元素居右显示

<div class"round"> <div class"income">收入</div> <div class"center"> <img style"width: 12px" src"../../img/big/up.png"> </div> <div class"rg"> <span cl…

项目实战典型案例1——redis只管存不管删除 让失效时间删除的问题

redis只管存不管删除 让失效时间删除的问题一&#xff1a;背景介绍二&#xff1a;思路&方案三&#xff1a;代码模拟1.错误示范通过班级id查询课程名称执行结果通过班级id修改课程名称&#xff08;并没有删除对应缓存&#xff09;执行结果2.正确示范在错误示范的更新接口上添…

详解进程 及 探查进程

进程的概念PCB是什么task_struct的作用如何执行进程进程的探查什么是bashps命令的使用&#xff08;查看进程&#xff09;创建进程探究父子进程进程的概念 简而言之&#xff0c;进程就是正在在执行的程序 之前说过&#xff0c;程序执行的第一步Windows是双击程序Linux是 ./ &a…