牛客周赛 Round 50 解题报告 | 珂学家

news2024/11/15 19:35:15

前言

alt


题解

数学场,对数学头痛, T_T.


A. 小红的最小最大

题型: 签到

a, b, x = list(map(int, input().split()))

if min(a, b) + x > max(a, b):
    print ("YES")
else:
    print ("NO")

B. 小红的四则运算(easy)

思路: 贪心

其实就3种情况

  • 三数之和
  • 两数之和 * 最大数
  • 三数相乘
arr = list(map(int, input().split()))

arr.sort()
r1 = arr[0] + arr[1] + arr[2]
r2 = (arr[0] + arr[1]) * arr[2]
r3 = arr[0] * arr[1] * arr[2]

print (max(r1, r2, r3))

C. 小红的四则运算(hard)

因为只有3个数,可以枚举操作顺序

  • 第一个和第二个数先操作,然后和第三个操作
  • 第二个和第三个数先操作,然后和第一个操作
a, b, c = list(map(int, input().split()))

v1 = max(a+b, a * b)
r1 = max(v1 + c, v1 * c)

v2 = max(b + c, b * c)
r2 = max(a + v2, a * v2)

print (max(r1, r2))

D. 小红的因式分解

思路: 解方程

其实就是一元二次解方程

alt

先要判定是否存在解

需要保证

b 2 − 4 a c ≥ 0 b^2 - 4ac \ge 0 b24ac0

难点在于转化为整数形态

可以从整除关系出发,即每个解 x 1 , x 2 {x_1,x_2} x1,x2的最简分母出发 d 1 , d 2 d_1, d_2 d1,d2,通过gcd演化得到

需要保证 d 1 ∗ d 2 ∣ a d1*d2|a d1d2∣a, 即d1*d2被a整除,就有整数解

t = int(input())

from math import gcd, sqrt

def solve():
    a, b, c = list(map(int, input().split()))
    # c = b1 * b2
    # b = a1 * b2 + a2 * b1
    # a = a1 * a2
    
    # -b +- sqrt(b^2 - 4ac)  / 2a
    if a == 0:
        return "%d %d %d %d" % (b, c, 0, 1)
    
    if b * b - 4 * a * c < 0:
        return "NO"
    z = b * b - 4 * a * c
    zr = int(sqrt(z))
    if zr * zr != z:
        return "NO"
    
    g1 = gcd(abs(-b + zr), abs(2 * a))
    g2 = gcd(abs(-b - zr), abs(2 * a))
    
    l1 = abs(2 * a) // g1
    l2 = abs(2 * a) // g2
    if abs(a) % (l1 * l2) != 0:
        return ("NO")
    
    x1 = (-b + zr) * l1 // (2 * a)
    x2 = (-b - zr) * l2 // (2 * a)
    
    l3 = a // (l1 * l2)
    
    return "%d %d %d %d" % (l1 * l3, -x1 * l3, l2, -x2)
    
for _ in range(t):
    print (solve())

E. 小红的树上移动

思路: 期望DP

期望题,核心就一句话

概率正推,期望倒推 概率正推,期望倒推 概率正推,期望倒推

期望公式:

e [ u ] = 1 / ∣ S ( h + 1 ) ∣ ∗ ( ∑ v ∈ S h + 1 e [ v ] ) + 1 e[u] = 1/|S(h+1)| * (\sum_{v\in S_{h+1}} e[v]) + 1 e[u]=1/∣S(h+1)(vSh+1e[v])+1

u 为 h 层节点 u为h层节点 uh层节点

v 为 h + 1 层节点 v为h+1层节点 vh+1层节点

∣ S ( h + 1 ) ∣ 为 h + 1 层的节点个数 |S(h+1)|为h+1层的节点个数 S(h+1)h+1层的节点个数

其本质是自底向上的DP

但是这个很特殊,它是分层的

所以这边采用分层BFS,然后逆序来实现

n = int(input())
g = [[] for _ in range(n)]

for _ in range(n - 1):
    u, v = list(map(int, input().split()))
    u, v = u - 1, v - 1
    g[u].append(v)
    g[v].append(u)
    

from collections import deque
from math import inf

e = [0] * n
h = [inf] * n
cs = [0] * n  # 子节点个数

layers = []

deq = deque()
h[0] = 0
deq.append(0)

# 分层bfs
while len(deq) > 0:
    tmp = []
    sz = len(deq)
    for i in range(sz):
        u = deq.popleft()
        for v in g[u]:
            if h[v] > h[u] + 1:
                h[v] = h[u] + 1
                deq.append(v)
                cs[u] += 1
        tmp.append(u)
    layers.append(tmp)
    
# 逆序求得期望
mod = 998244353
preE, preN = 0, 0
depth = len(layers)
for i in range(depth - 1, -1, -1):
    l = layers[i]
    for v in l:
        if cs[v] == 0:
            # 叶子节点为终结点,期望为0
            e[v] = 0
        else:
            # 非叶子节点,其期望由下一层的节点决定 
            e[v] = (preE + preN) * pow(preN, mod - 2, mod) % mod
    preE = sum([e[v] for v in l]) % mod
    preN = len(l)
    
print (e[0])

F. 小红的网格

后期补上

直觉感觉,需要枚举平方数,以及可行解边长的GCD有一定关系

t = int(input())

from math import gcd
def solve(x):
    i = 0
    g = 0
    d = 2
    while i * i <= x:
        y = x - i * i
        r = int(y ** 0.5)
        if r * r == y:
            g = gcd(g, i)
            g = gcd(g, r)
            if (i // g + r // g) % 2 == 1:
                d = 1
        i += 1
    if g == 0:
        return "inf"
    else:
        return d * g * g
        
for _ in range(t):
    x = int(input())
    print (solve(x))

写在最后

alt

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

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

相关文章

职场中的3个误区,你踩坑了吗?

1、个人发展比工资待遇更重要 这句话也不能说是完全错的&#xff0c;但是你要明白能给你提供发展空间的公司&#xff0c;待遇也不会差到哪里去&#xff0c;而且随着你个人能力的提升&#xff0c;发展也会越来越好&#xff0c;你的待遇也自然水涨船高&#xff0c;这个道理其实大…

乐鑫ESP-NOW与Wi-Fi SoC方案家居设备无缝连接,启明云端乐鑫代理商

随着科技的不断进步&#xff0c;智能家居逐渐成为现代生活的一部分。ESP-NOW技术以其独特的无线通信能力&#xff0c;为智能家居领域带来了一场革命。 ESP-NOW是一种由乐鑫定义的无线通信协议&#xff0c;它能够在无需路由器的情况下&#xff0c;实现设备间的直接、快速、低功…

如何高效学习(一)

什么是学习&#xff1f;学习的本质是什么&#xff1f;如何学习&#xff1f;如何更加高效的学习 以下内容均为观看B站UP主(硬核学长2077)所做总结和自我分析 一、自我介绍 ​ 我&#xff0c;一个二三线城市小小程序员&#xff0c;在高中学习就很一般&#xff0c;但当时并没有特…

解锁敦煌网成功秘籍:批量注册买家号测评的高效策略

敦煌网&#xff08;DHgate&#xff09;作为一个跨境电商平台&#xff0c;搭建境外本土网络环境并实现批量注册买家号下单&#xff0c;需要遵循一系列严谨的步骤和考虑多个关键因素。以下是一个概括性的指南&#xff1a; 一、环境要求 国外服务器&#xff1a;首先&#xff0c;…

WPF 初识依赖属性

依赖属性的意义和作用 核心模块内存共享&#xff0c;节省空间数据绑定、样式、模板、动画。。。。如果没有依赖属性&#xff0c;这个框架就是一个控件框架 相当于Winform 依赖属性的基本定义 基本过程&#xff1a;声明、注册、包装 在需要写依赖属性的类中&#xff0c;继承…

Axure第12享:Google加载Axure扩展程序

1、需求描述 在双击打开RP文件进行预览时&#xff0c;提示要为Google浏览器加载Extension&#xff08;扩展程序&#xff09;&#xff0c;如下图所示。 2、解决思路 按照系统指导的操作步骤&#xff0c;但要注意1点&#xff0c;加载“扩展程序”时是选择整个文件夹&#xff0c…

3款ui设计师必备的高效软件,一定要收藏!

UI设计小伙伴们&#xff0c;你们是否在寻找那些能够让设计工作事半功倍的插件呢&#xff1f;今天&#xff0c;我要为大家带来3款UI设计软件中的高效软件&#xff0c;它们不仅能够极大提升我们的工作效率&#xff0c;还能让我们的设计更加专业和精致。让我们一起来看看这些不容错…

动手学深度学习54 循环神经网络

动手学深度学习54 循环神经网络 1. 循环神经网络RNN2. QA 1. 循环神经网络RNN h t h_t ht​ 与 h t − 1 h_{t-1} ht−1​ x t − 1 x_{t-1} xt−1​有关 x t x_t xt​ 与 h t h_t ht​ x t − 1 x_{t-1} xt−1​ 有关 怎么把潜变量变成RNN–假设更简单 潜变量和隐变量的区…

透明加密软件核心技术分享|十款好用的透明加密软件分享

透明加密软件的核心技术在于其能够自动、实时地对文件进行加密和解密&#xff0c;而这个过程对最终用户来说是无感的。这种技术在不改变用户操作习惯的前提下&#xff0c;增强了数据的安全性。下面是透明加密软件的一些核心技术要点。 实时加密与解密&#xff1a;软件在文件被打…

虚拟内存【Linux】

虚拟内存 为什么需要虚拟内存Linux虚拟内存的结构32位系统下的虚拟地址空间64位系统下的虚拟地址空间页表多级页表TLB 流程虚拟内存的作用 为什么需要虚拟内存 为了在进行多进程编码进行内存访问的时候保持内存的隔离性&#xff0c;数据安全性&#xff0c;所以出现了虚拟内存。…

C++--智能指针

普通指针创建动态内存的问题: 1.new和new[]的内存需要使用delete和delete []释放。 2.有时忘记释放内存。 3.不知该在何时释放内存。 智能指针的优点: 在不需要对象时自动释放对象&#xff0c;从而避免内存泄漏和其他与内存管理相关的问题。 智能指针有:unique_ptr,share…

可转债之强赎条款

摘要&#xff1a;每天学习一点金融小知识 做可转债投资&#xff0c;强赎风险是特别需要注意的&#xff0c;若投资者没有及时采取措施&#xff0c;就有可能造成很大的损失。本文从可转债的定义、强赎条款的原因及强赎的情况几个方面来介绍下可转债的强赎条款。 什么是可转换债券…

算法——同步算法

在力扣有这样一道题求交集&#xff0c;与此类似的还有求差集&#xff0c;相关的解法有很多。我这里提供一种思路&#xff1a;利用C的容器set对这两个数组去重&#xff0c;遍历数组插入set即可去重。再同时遍历比较set的每个元素。 代码实现很简单&#xff0c;如下所示&#xff…

【第四届会后4个月检索】第五届计算机网络安全与软件工程国际学术会议(CNSSE 2025)

第五届计算机网络安全与软件工程国际学术会议&#xff08;CNSSE 2025&#xff09; 2025 5th International Conference on Computer Network Security and Software Engineering 重要信息 大会官网&#xff1a;www.cnsse.org 大会时间&#xff1a;2025年2月21-23日 会议地点&…

CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)

文章目录 参考qwb2018 core检查逆向调试打包上传测试脚本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )开启KPTI利用swapgs_restore_regs_and_return_to_usermode开启KPTI利用SIGSEGVrop设置CR3寄存器再按照没有KPTI返回 kernel rop ret2userpt_regs 构造…

使用命令行修改Ubuntu 24.04的网络设置

Ubuntu里&#xff0c;使用命令行下修改IP地址&#xff0c;网上有很多方案&#xff0c;我最终觉得这个方案&#xff08;使用Netplan&#xff09;最好&#xff0c;最根本&#xff0c;记录下来备查 1.使用命令ip link show 查看Ubuntu上可以使用的网络接口名称 2.查找Netplan的配…

全志T527 适配YT8531 双以太网

一、确认硬件接口 phy1&#xff1a; phy2&#xff1a; PHY 地址设置&#xff1a; YT8531 的地址由上图所示的三个管脚外接 ( 或内部默认 ) 电阻来配置。外部不接上下拉电阻时&#xff0c;内部默认 phy 地址为 000( 十进制 0) &#xff1b;若外接电阻&#xff0c;例如上图所接…

前端面试题33(实时消息传输)

前端实时传输协议主要用于实现实时数据交换&#xff0c;特别是在Web应用中&#xff0c;它们让开发者能够构建具有实时功能的应用&#xff0c;如聊天、在线协作、游戏等。以下是几种常见的前端实时传输协议的讲解&#xff1a; 1. Short Polling (短轮询) 原理&#xff1a;客户…

二分查找3

1. 有序数组中的单一元素&#xff08;540&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 二分查找解题关键就在于去找到数组的二段性&#xff0c;这里数组的二段性是从单个数字a开始出现然后分隔出来的&#xff0c;如果mid落入左半部分那么当mid为偶数时nums[mid1]…

搞清楚[继承],易如反掌

穷不失义&#xff0c;达不离道。——孔丘《论语》 继承 1、简单理解2、继承2、1、继承的概念2、2、继承定义2、3、基类和派生类对象赋值转换2、4、继承中的作用域2、5、派生类默认成员函数2、6、继承中的特点2、6、1、友元2、6、2、静态成员2、6、3、菱形继承及菱形虚拟继承 3、…