牛客周赛 Round 35 解题报告 | 珂学家 | 构造 + 组合数学

news2024/9/25 21:24:39

牛客周赛 Round 35 解题报告 | 珂学家 | 构造 + 组合数学


前言

alt


整体评价

F/G是数学题,E是一道有趣的构造题, 需要一点点空间想象力,其他几题也不错。不过整场被python的库函数,折磨得崩溃,T_T.


A. 小红的字符串切割

题型: 签到

s = input()
half = len(s) // 2

print (s[0:half])
print (s[half:])

B. 小红的数组分配

思路: map应用+构造

map的一个应用,偶数肯定ok,奇数肯定没法构造

from collections import Counter
n = int(input())

arr = list(map(int, input().split()))

cnt = Counter(arr)

arr1 = []
arr2 = []
ok = True
for (k, v) in cnt.items():
    if v % 2 == 1:
        ok = False
    else:
        arr1.extend([k] * (v // 2))
        arr2.extend([k] * (v // 2))

if ok:
    print (*arr1, sep = ' ')
    print (*arr2, sep = ' ')
else:
    print (-1)

C. 小红关鸡

思路: 双指针

排序后,双指针模拟,枚举然后取最大的覆盖点集数

n, k = list(map(int, input().split()))
arr = list(map(int, input().split()))

res = 0.0

arr.sort()
j = 0
for i in range(n):
    while j < n and arr[j] - arr[i] <= k:
        j += 1
    d = j - i
    res = max(res, d * 1.0 / n)

print ("%.6f" % (res))

D. 小红的排列构造

思路: 模拟

把多的索引位置组成一个序列,然后把少的数字组成一个序列

然后zip一下,就出来了

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

vis = [False] * (n + 1)

more = []
for (i, v) in enumerate(arr):
    if v > n or vis[v]:
        more.append(i + 1)
    else:
        vis[v] = True

lack = []
for i in range(1, n + 1):
    if not vis[i]:
        lack.append(i)

print (len(more))
for (k, v) in zip(more, lack):
    print (k, v)

E. 小红的无向图构造

思路: 构造

  • 先构建树结构,保证最短距离满足要求
  • 在满足边数

前一个相对简单,后一个需要一点点空间想象力

  1. 可以在同距离的点集合中,构建星状结构的边

  2. 在距离差1的两个点集合中,交叉构建边

这两种边,对之前点的最短距离,毫无影响

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

def solve(res):
    hp = set()
    def add(v1, v2):
        if v1 > v2:
            v1, v2 = v2, v1
        hp.add((v1, v2))
        res.append((v1, v2))
        
    def exist(v1, v2):
        if v1 > v2:
            v1, v2 = v2, v1
        return (v1, v2) in hp
        
    # 1. 满足点的距离
    tx = [(i, v) for (i, v) in enumerate(arr) if i != 0]
    tx.sort(key=lambda x: x[1])
    
    path = [[] for _ in range(n)]
    path[0].append(0)
    acc = 0
    far = 0
    for (p, v) in tx:
        if v <= far + 1:
            path[v].append(p)
            add(path[v - 1][-1], p)
            acc += 1
        else:
            return False
        far = max(v, far)
    
    # 判定所需的边数是否大于要求
    if acc > m:
        return False
    
    # 2. 补充边的阶段
    #    2.1. 补充同距离的边
    j = 0
    while acc < m and j < n:
        brr = path[j]
        bn = len(brr)
        for si in range(bn):
            for sj in range(si + 1, bn):
                if acc == m: 
                    return True
                add(brr[si], brr[sj])
                acc += 1
        j += 1
    
    #    2.2. 补充距离为1的点集合之间的边
    for i in range(n - 1):
        for e1 in path[i]:
            for e2 in path[i + 1]:
                if acc == m:
                    return True
                if not exist(e1, e2):
                    add(e1, e2)
                    acc += 1
    return acc == m

ls = []
if solve(ls):
    for (p1, p2) in ls:
        print (p1 + 1, p2 + 1)
else:
    print (-1)

F. 小红的子序列权值和(easy)

和G题,一起讲


G. 小红的子序列权值和(hard)

思路: 经过公式的抽象提炼,可以归纳为 加权和 乘积

其实1的情况比较特殊

alt

def ksm(b, v):
    r = 1
    while v > 0:
        if v % 2 == 1:
            r = r * b % mod
        v //= 2
        b = b * b % mod
    return r

class Factorial:
    def __init__(self, N, mod) -> None:
        N += 1
        self.mod = mod
        self.f = [1 for _ in range(N)]
        self.g = [1 for _ in range(N)]
        for i in range(1, N):
            self.f[i] = self.f[i - 1] * i % self.mod
        self.g[-1] = pow(self.f[-1], mod - 2, mod)
        for i in range(N - 2, -1, -1):
            self.g[i] = self.g[i + 1] * (i + 1) % self.mod
 
    def fac(self, n):
        return self.f[n]
 
    def fac_inv(self, n):
        return self.g[n]
 
    def comb(self, n, m):
        if n < m or m < 0 or n < 0: return 0
        return self.f[n] * self.g[m] % self.mod * self.g[n - m] % self.mod
 
    def perm(self, n, m):
        if n < m or m < 0 or n < 0: return 0
        return self.f[n] * self.g[n - m] % self.mod
 
    def catalan(self, n):
        return (self.comb(2 * n, n) - self.comb(2 * n, n - 1)) % self.mod
 
    def inv(self, n):
        return self.f[n - 1] * self.g[n] % self.mod

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

mod = 10 ** 9 + 7
n1, n2, n3 = arr.count(1), arr.count(2), arr.count(3)

fac = Factorial(n, mod)
    
s1 = ksm(2, n1)
s2 = sum([fac.comb(n2, i) * (i + 1) % mod for i in range(n2 + 1)])
s3 = sum([fac.comb(n3, i) * (i + 1) % mod for i in range(n3 + 1)])

res = s1 * s2 * s3 % mod
res = (res - 1 + mod) % mod 

print (res)

写在最后

alt

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

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

相关文章

IO多路复用:提高网络应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【比较mybatis、lazy、sqltoy、lambda、操作数据 】操作批量新增、分页查询【一】

orm框架使用Lambda性能比较 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.3-JDK17 数据库表(含有唯一性索引s_u) CREATE TABLE sys_u…

文件底层的深入理解之文件输入输出重定向

目录 一、文件fd的分配规则 二、对输出重定向现象的理解 三、输出输入重定向的简单实现 1、输出重定向 2、输入重定向 一、文件fd的分配规则 最小的没有被使用的数组下标&#xff0c;会被分配给最新打开的文件。 二、对输出重定向现象的理解 正如上面这段代码所示&#xff0…

Java+SpringBoot+Vue自习室预约系统全栈开发

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

[C++核心编程](四):类和对象——封装

目录 封装 访问权限 struct和class的区别 成员属性设置为私有 设计案例 C面向对象的三大特性&#xff1a;封装、继承、多态 C认为万事万物皆为对象&#xff0c;对象上有其属性和行为&#xff01;&#xff01; 封装 意义&#xff1a; 将属性和行为作为一个整体&#xff0…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为&#xff0c;会故意设置无限debugger作为一种简单的反爬机制&#xff0c;它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

图文详解:在虚拟机上安装Win7,超详细!!!

一.准备 1.虚拟机&#xff1a; https://pan.xunlei.com/s/VNpZ_9c2AdrnUW1YWNdhBLW-A1?pwdyp6b# 2.win7的iOS&#xff1a; https://pan.xunlei.com/s/VNpZd61K6a7cDG3YkI_3oVbUA1?pwdyrfp# 二.安装配置 三.配置Win7 1.记得输入原先下载的镜像文件 2.那我们选择自定义 3…

c++之旅——第二弹

大家好啊&#xff0c;这里是c之旅第二弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一、内存四区…

2024-02学习笔记

1.当我们向Set集合中添加一个已经存在的元素时 当我们向Set集合中添加一个已经存在的元素时&#xff0c;Set集合会如何处理呢&#xff1f;实际上&#xff0c;Set集合不会将重复的元素添加到集合中。当我们向Set集合中添加一个元素时&#xff0c;Set集合会首先判断该元素是否已…

支持向量机 SVM | 线性可分:公式推导

目录 一. SVM的优越性二. SVM算法推导小节概念 在开始讲述SVM算法之前&#xff0c;我们先来看一段定义&#xff1a; 支持向量机(Support VecorMachine, SVM)本身是一个二元分类算法&#xff0c;支持线性分类和非线性分类的分类应用&#xff0c;同时通过OvR或者OvO的方式可以应用…

Sora:探索大型视觉模型的前世今生、技术内核及未来趋势

Sora&#xff0c;一款由OpenAI在2024年2月推出的创新性文生视频的生成式AI模型&#xff0c;能够依据文字说明&#xff0c;创作出既真实又富有想象力的场景视频&#xff0c;展现了其在模拟现实世界方面的巨大潜能。本文基于公开技术文档和逆向工程分析&#xff0c;全面审视了Sor…

一文搞懂浏览器缓存机制

文章目录 概述强制缓存协商缓存总结参考文章 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制&#xff0c;其机制是根据HTTP报文的缓存标识进行的 浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后&#xff0c;会根据响应报文的缓存标识&#xff0c;决定是否进行缓存…

【学习总结】什么是DoS和DDoS

[Q&A] 什么是DoS DoS 是 “Denial of Service”&#xff08;拒绝服务&#xff09;的缩写&#xff0c;它是一种网络攻击方式&#xff0c;其目的是使目标计算机或网络资源无法为合法用户提供正常的服务。通过向目标系统发送大量请求、消耗其带宽、处理器或内存等资源&#…

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前后端分离vue+nodejs高校教室资源预约管理系统4e80m

本系统的设计与实现共包含9个表:分别是配置文件信息表&#xff0c;教师信息表&#xff0c;教室类型信息表&#xff0c;教室信息信息表&#xff0c;教室预约信息表&#xff0c;系统公告信息表&#xff0c;token表信息表&#xff0c;用户表信息表&#xff0c;学生信息表&#xff…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

二、数据结构——单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。

对于链表来说&#xff0c;由于new操作时间太长&#xff0c;因此&#xff0c;算法题中一般使用静态链表。 1.单链表 采用数组实现单链表&#xff0c;可以直接开两个数据&#xff0c;一个数组存放数值&#xff0c;另外一个数据存放下一个元素&#xff08;指针&#xff09;。 示…

klipper api测试脚本whconsole.py

1、whconsole.py简单介绍 whconsole.py用于测试klipper的对外接口api&#xff0c;其实是连接klipper的uds服务&#xff08;Unix Domain Socket&#xff09;&#xff0c;官方也有介绍API 服务器 - Klipper 文档。 需要注意是的whconsole.py脚本启动不能使用Python3&#xff0c;…

想要调用淘宝开放平台API,没有申请应用怎么办?

用淘宝自定义API接口可以访问淘宝开放平台API。 custom-自定义API操作 taobao.custom 公共参数 注册账号获取API请求地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xf…

【计算机网络】深度学习HTTPS协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【计算机网络】深度学习HTTPS协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一:HTTPS是什么二:HTTPS的工作过程三:对称加密四:非对称加密五:中间人攻击1…