[蓝桥杯复盘] 第 3 场双周赛20231111

news2025/1/16 20:00:46

[蓝桥杯复盘] 第 3 场双周赛20231111

    • 总结
    • 深秋的苹果
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 鲜花之海
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 斐波拉契跳跃
      • 2. 思路分析
      • 3. 代码实现
    • 星石传送阵
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

总结

  • 做了后4题。https://www.lanqiao.cn/oj-contest/challenge-3/
  • T5 二分
  • T6 数学公式
  • T7 博弈
  • T8 优化建图+dij
  • 在这里插入图片描述

深秋的苹果

链接: 深秋的苹果

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 二分即可。但这题上界很大,无脑1e18会wa,实测2e18能过。

3. 代码实现

#       ms
def solve():
    n, m = RI()
    arr = RILST()
    p = s = 0
    for v in arr:
        p += v*s
        s += v


    def ok(x):
        cnt = 1
        s = c =0
        for v in arr:
            c += v * s
            s += v
            if c > x:
                c = 0
                s = v
                cnt += 1
                if cnt > m:
                    return False
        return True

    print(lower_bound(0, p, key=ok))
    # print(lower_bound(0, 2*10**18, key=ok))

鲜花之海

链接: 鲜花之海

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 画一下矩阵图,发现按照和可以分为左上半区和右下半区,是一个分段函数。
  • 那么分类讨论,看看k落在第几条↙斜线上,由于是等差数列求和,需要解一元二次方程。

3. 代码实现

"""
x*(x+1)//2 <= k
x^2 + x  - k*2<= 0
x <= (-1 +- sqrt(1 + 4 * k*2))/2

(n-1+n-1-x+1)*x//2 <= k
"""


#       ms
def solve():
    n, k = RI()
    left = (1 + n - 1) * (n - 1) // 2
    mid = n
    if k <= left + mid:
        x = int((-1 + sqrt(1 + 4 * k * 2)) / 2)
        s = x * (x + 1) // 2
        h = x + 1
        if s == k:
            print(h - 1, 1)
        else:
            h += 1
            k -= s
            print(k, h - k)
    else:
        k -= left + mid
        # print(left,mid,k)
        x = int((2 * n - 1 - sqrt((2 * n - 1) ** 2 - 4 * 2 * k)) / 2)
        s = (n - 1 + n - 1 - x + 1) * x // 2
        # print(x,s)
        h = n + x + 1
        if s == k:
            print(n, h - n)
        else:
            h += 1
            k -= s
            # print(x,h,k)
            print(2 + x + k - 1, h - (2 + x + k - 1))

斐波拉契跳跃

链接: 斐波拉契跳跃在这里插入图片描述
在这里插入图片描述

2. 思路分析

  • 博弈题优先考虑记忆化搜索。
  • 这题转移和状态都是走斐波那契数列的,所以状态和转移都很少,因此可以过。

3. 代码实现


fib = [0, 1, 2]
while fib[-1] <= 10 ** 5:
    fib.append(fib[-1] + fib[-2])
pfib = {v: i for i, v in enumerate(fib)}


#       ms
def solve():
    n, = RI()
    a = RILST()
    pos = [0] * n
    for i, v in enumerate(a):
        pos[v - 1] = i

    @lru_cache(None)
    def dfs(p, d):  # 从p位置出发,上一步长d时,能否赢
        for v in fib[pfib[d] + 1:]:
            if v >= n: break
            if p + v < n and a[p + v] > a[p]:
                if not dfs(p + v, v):  # 对方不能赢
                    return True
            if p - v >= 0 and a[p - v] > a[p]:
                if not dfs(p - v, v):
                    return True
        return False

    for st in range(n):
        print(['Little Qiao', 'Little Lan'][dfs(st, 0)])

星石传送阵

链接: 星石传送阵

在这里插入图片描述

在这里插入图片描述

2. 思路分析

  • 题面太乱了,省流:每个位置i的f(x)是x分解质因数求和modn+1;i和f可以互达;f相同的i也可以互达。问a到b最短路。
  • 那么由于有很多节点的f可能是相同的,他们都可以互达的话就是稠密图,考虑增加中间虚拟节点连接他们。
  • 由于f是对n取模后+1的,那么新节点可以用[n+1,2n]这些节点。
  • 那么u->f->v这算1次跳跃,每条边边权应该是0.5;正常互条的节点边权是1;实现时全部乘2避免处理浮点数。

  • 另一种思路,按f分组,直接BFS,可以省去一个log。
  • bfs时,对每个节点处理本组f记录的邻居后,直接移除这整个组,因为他们已经访问过了。这样就可以避免稠密图的边过多造成的TLE。

3. 代码实现


class PrimeTable:
    def __init__(self, n: int) -> None:
        self.n = n
        self.primes = primes = []  # 所有n以内的质数
        self.min_div = min_div = [0] * (n + 1)  # md[i]代表i的最小(质)因子
        min_div[1] = 1

        # 欧拉筛O(n),顺便求出min_div
        for i in range(2, n + 1):
            if not min_div[i]:
                primes.append(i)
                min_div[i] = i
            for p in primes:
                if i * p > n: break
                min_div[i * p] = p
                if i % p == 0:
                    break

    def prime_factorization(self, x: int):
        """分解质因数,复杂度
        1. 若x>n则需要从2模拟到sqrt(x),如果中间x降到n以下则走2;最坏情况,不含低于n的因数,则需要开方复杂度
        2. 否则x质因数的个数,那么最多就是O(lgx)"""
        n, min_div = self.n, self.min_div
        for p in range(2, int(x ** 0.5) + 1):
            if x <= n: break
            if x % p == 0:
                cnt = 0
                while x % p == 0: cnt += 1; x //= p
                yield p, cnt
        while 1 < x <= n:
            p, cnt = min_div[x], 0
            while x % p == 0: cnt += 1; x //= p
            yield p, cnt
        if x >= n and x > 1:
            yield x, 1



pt = PrimeTable(10 ** 6)


def solve():
    n, a, b = RI()
    arr = RILST()
    g = [[] for _ in range(2 * n + 3)]
    for i, v in enumerate(arr, start=1):
        f = sum(x * y for x, y in pt.prime_factorization(v)) % n + 1
        ff = f + n + 1  # 跳到虚拟节点,边权0.5,实际处理边权全部乘2
        g[ff].append((i, 1))
        g[i].append((ff, 1))
        if f <= n:  # 互跳节点
            g[i].append((f, 2))
            g[f].append((i, 2))

    q = [(0, a)]
    dis = [inf] * (2 * n + 3)
    dis[a] = 0
    while q:
        # print(q)
        c, u = heappop(q)
        if c > dis[u]: continue
        if u == b:
            return print(c // 2)
        for v, w in g[u]:
            if c + w < dis[v]:
                dis[v] = c + w
                heappush(q, (c + w, v))

    print(-1)

六、参考链接

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

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

相关文章

SqlServerAgent当前未运行,因此无法将此操作通知他。错误:22022

问题&#xff1a;SqlServerAgent当前未运行&#xff0c;因此无法将此操作通知他。&#xff08;Microsoft SQL Server&#xff0c;错误&#xff1a;22022&#xff09; 解决方案&#xff1a; 1.Win R 输入 services.msc 后&#xff0c;点击【确定】按钮 2.选择SQL Server 代理…

ObjectArx动态加载及卸载自定义菜单

上节中我们介绍了如何制作自定义菜单即cuix文件&#xff1a;给CAD中添加自定义菜单CUIX-CSDN博客https://blog.csdn.net/qianlixiaomage/article/details/134349794在此基础上&#xff0c;我们开发时通常需要在ObjectArx程序中进行动态的添加或者删除cuix菜单。 创建ObjectArx…

php性能追踪与分析

PHP扩展下载&#xff1a;https://pecl.php.net/package/xhprof php.ini配置 [xhprof] extensionxhprof xhprof.output_dir/temp/xhprof auto_prepend_file /temp/inject_xhprof.php if(php_sapi_name() cli) {return; }$xhprof_config[enabled]1;if(!empty($xhprof_config…

数据挖掘:分类,聚类,关联关系,回归

数据挖掘&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要学&…

C语言求解猴子分桃问题

题目&#xff1a; 海滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子凭据分为五份&#xff0c;多了 一个&#xff0c;这只猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分 成五份&#xff0c;又多了一个&#xff0c;它同样把多…

基于springboot+vue的校园闲置物品交易系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven 项目介绍 本文从管…

补坑:Java的字符串String类(2):一些OJ题目

有关String的方法可以看看我上一篇博客 补坑&#xff1a;Java的字符串String类&#xff08;1&#xff09;-CSDN博客 387. 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它…

常见面试题-分布式锁

Redisson 分布式锁&#xff1f;在项目中哪里使用&#xff1f;多久会进行释放&#xff1f;如何加强一个分布式锁&#xff1f; 答&#xff1a; 什么时候需要使用分布式锁呢&#xff1f; 在分布式的场景下&#xff0c;使用 Java 的单机锁并不可以保证多个应用的同时操作共享资源…

《红蓝攻防对抗实战》十一.内网穿透之利用SSH协议进行隧道穿透

利用DNS协议进行隧道穿透 一.前言二.前文推荐三. 利用SSH协议进行隧道穿透1.SSH隧道-本地端口转发2.SSH隧道-远程端口转发3.SSH隧道-动态端口转发 四.本篇总结 一.前言 SSH&#xff08;Secure Shell&#xff09;协议是一种加密的网络传输协议&#xff0c;它可以在不安全的网络…

Zephyr-7B论文解析及全量训练、Lora训练

文章目录 一、Zephyr&#xff1a;Direct Distillation of LM Alignment1.1 开发经过1.1.1 Zephyr-7B-alpha1.1.2 Zephyr-7B-beta 1.2 摘要1.3 相关工作1.4 算法1.4.1 蒸馏监督微调&#xff08;dSFT&#xff09;1.4.2 基于偏好的AI反馈 (AIF&#xff09;1.4.3 直接蒸馏偏好优化&…

VB.NET—Bug调试(参数话查询、附近语法错误)

目录 前言: BUG是什么&#xff01; 事情的经过: 过程: 错误一: 错误二: 总结: 前言: BUG是什么&#xff01; 在计算机科学中&#xff0c;BUG是指程序中的错误或缺陷&#xff0c;它通过是值代码中的错误、逻辑错误、语法错误、运行时错误等相关问题&#xff0c;这些问题…

Leetcode2833. 距离原点最远的点

Every day a Leetcode 题目来源&#xff1a;2833. 距离原点最远的点 解法1&#xff1a;贪心 要使得到达的距离原点最远的点&#xff0c;就看 left 和 right 谁大&#xff0c;将 left 和 right 作为矢量相加&#xff0c;再往同方向加上 underline。 答案即为 abs(left - rig…

Adobe premiere裁剪视频尺寸并转为GIF格式

第一步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“DNxHR_2K” 第二步&#xff1a;导出设置

Python零基础小白常遇到的问题总结

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

可以体现Python语法精妙的十个例子!

文章目录 前言1.for - else2.一颗星*和两颗星**3.三元表达式4.with - as5.列表推导式6.列表索引的各种骚操作7.lambda函数8.yield 以及生成器和迭代器9.装饰器10.巧用断言assertPython技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例…

linux中的工程管理工具makefile

makefile文件:Linux上的工程管理工具,可以实现自动化编译; 工程中的源文件不计其数,可以根据模块,功能等存储在不同的目录中; makefile可以提高编译效率,使用make命令每次只会编译那些修改了的或者依赖修改了的这些文件,没有修改的文件不会重新编译. VS底层就有自己的makefile文…

野火i.MX6ULL开发板检测按键evtest(Linux应用开发)

之前一直查找不到evtest&#xff0c;因为没有下载成功&#xff0c;很可能是网络不好&#xff0c;下次可以软件源可以换成国内大学镜像网站。 重新断开板子电源启动&#xff0c;再次连接网络&#xff0c;下载evtest成功&#xff01;&#xff01;

【从0到1设计一个网关】上岸大厂的秘诀之一

文章目录 前言【从0到1设计一个网关】什么是网关&#xff1f;以及为什么需要自研网关&#xff1f;【从0到1设计一个网关】自研网关的设计要点以及架构设计【从0到1设计一个网关】自研网关的架构搭建【从0到1设计一个网关】网络通信框架Netty的设计【从0到1设计一个网关】整合Na…

为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学

目录 引言 可能有人想问为什么要学习云服务器&#xff1f; &#xff08;获取Linux环境&#xff0c;获得外网IP) 二、安装教程 引言 可能有人想问为什么要学习云服务器&#xff1f; &#xff08;获取Linux环境&#xff0c;获得外网IP) 1.虚拟机&#xff08;下策&#xff09; …

【完美世界】石昊负伤遭囚禁,无始种惊现,二秃子用柳枝力保石昊

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料完美世界最新预告资讯&#xff0c;《完美世界》第137集预告片已经更新了&#xff0c;这一集的预告片充满了紧张的气氛和精彩的情节。从预告中我们可以看到&#xff0c;石昊的真实身份被天人族知晓&…