构造mex(牛客周赛 Round 59)
题目链接;
D-构造mex_牛客周赛 Round 59 (nowcoder.com)
题目描述:
输出和输出描述:
输入样例:
3
6 3 3
7 4 3
6 6 0
输出样例:
NO
YES
4 0 1 2
YES
1 1 1 1 1 1
分析:
数学思维题,赛后看了一下比率:182/3788。
对n和k的大小进行分类讨论:
n < k
n<k的情况一定输出是0,因为极端的情况下n最多能达到的是0 1 2 ... n - 1,到达不了k - 1,那么第一个没有的整数是: n,就不再是k了。
n == k
这个就是 0 1 2 ... n - 1,又因为n == k, 所以第一个没有的是整数就是n,也即是k,只需要判断前n项和是不是等于s的,也即是 s == (n - 1) * n / 2 ? "YES" : "NO";
例子:
s = 6, n = 4, k = 4
输出的是:
0 1 2 3
n > k
对k的特殊情况进行讨论:
k == 0
k等于0的情况下,能组成的最小值是 1 * n,如果s小于最小值的话,那就是不可能的输出"NO",否则的话,可以先输出n-1个1,然后最后在输出最后一个 s - (n - 1)即可。
例子:
s = 11, n = 5, k = 0;
那么构造的是: 0 0 0 0 11
k == 1
k等于1的情况下,能组成的最小值是0(n个0)。
但是要注意s等于1就要输出"NO"了,因为我输出n-1个0,最后在输出一个1,但是这个1和k一样,因此我想把这个1换成2或者0,但是发现换为0的那么就需要一个0去加1,换为2的话,就需要一个0减去1,那么就变味负的了,因此输出"NO"
例子:
s = 1, n = 4, k = 1
输出的是: "NO"
s不等于1的时候,可以先输出n-1个0,然后在输出最后一个 s - (n - 1) * 0。
例子:
s = 3, n = 4, k = 1
输出的是: 0 0 0 3
k == 其他
这个是最复杂的情况了。k等于其他(2, 3, 4, ....)的情况下的最小值是: (0 1 2 .....k - 1 0 0 0 0 0 0 )也即是 (k - 1) * k / 2 + (n - k) * 0,要是当前的s小于这个最小值的话直接输出"NO"。
先去分配0 到 (k - 1)这n个数,那么还剩下和为:s- k * (k - 1) / 2, n - k个数。
贪心的做法:先分配 n - k - 1个0,在把最后一个数的值为s- k * (k - 1) / 2。但是需要注意的是 这个值是不是等于k的。
要是等于k的话就出现了k,我就会让这个最后一个数减去1,然后让1到k-1后面的0 0 0 0 中任意一个0改为1即可,但是需要注意的是,1到k-1的后面有没有0,没有的话就不可以。
例子:
s = 9, n = 4, k = 4
输出的是:
按照之前的思路输出的是
0 1 2 3 4,但是发现出现了4,因此我就会让4减去1,然后让蓝色部分的一个0加上1,但是发现蓝色部分没有0的出现,因此正确的输出是"NO",那可不可以让红色部分的某一个加1,当然不可以,红色部分某一个加1了,第一个没有的整数就不再是k了。
例子:
s = 9, n =10, k = 4
刚开始构造的是:
0 1 2 3 0 0 0 0 0 4
出现了k,因此我会让蓝色部分的第一个0加1,让最后这个数-1即可,也就是变为了:
0 1 2 3 1 0 0 0 0 3
要是不等于k的话,无论是大于还是小于直接输出即可。
例子:
s = 8, n = 10, k = 4
输出的是:
0 1 2 3 0 0 0 0 0 2
代码:
#include<bits/stdc++.h>
#define int long long
#define endl "\n"using namespace std;signed main() {int t;cin >> t;while(t -- ) {int s, n, k;cin >> s >> n >> k;if(n == k ){if(s != (n - 1) * n / 2) {cout << "NO" << endl;} else {cout << "YES" << endl;for(int i = 0; i < n; i ++ ) {cout << i << " ";}cout << endl;}continue;}if(n < k ) {cout << "NO" << endl;} else {int a[n + 10];if(k == 0) {if(s < 1 * n) {//最小是 n * 1 cout << "NO" << endl;} else {cout << "YES" << endl;for(int i = 1; i <= n - 1; i ++ ) {cout << 1 << " ";}cout << s - (n - 1) << endl;}} else if(k == 1) {if(s == 1) {cout << "NO" << endl;} else {cout << "YES" << endl;for(int i = 1; i <= n - 1; i ++ ) {cout << 0 << " ";}cout << s << endl;}} else {
// cout << "sum = " << k * (k - 1) / 2 << endl;
// cout << "s = " << s << endl;// 最小是 k * (k - 1) / 2if(s < k * (k - 1) / 2 + 0 * (n - k)) {cout << "NO" << endl;} else {int b[n + 10];//k个了 for(int i = 0; i <= k - 1; i ++ ) {a[i] = i;}int sum = s - (k - 1) * k / 2;int gs = n - k; // 剩余的个数 //cout << "sum = " << sum << " gs = " << gs << endl;for(int i = 1; i <= gs - 1; i ++ ) {b[i] = 0;}b[gs] = sum;if(sum == k) {if(gs == 1) {cout << "NO" << endl;continue;}b[1] = 1;b[gs] = sum - 1;}cout << "YES" << endl;for(int i = 0; i <= k - 1; i ++ ) {cout << a[i] << " ";}for(int i = 1; i <= gs; i ++ ) {cout << b[i] << " ";}cout << endl;}}}}return 0;
}
运行结果:
相关文章:

构造mex(牛客周赛 Round 59)
题目链接; D-构造mex_牛客周赛 Round 59 (nowcoder.com) 题目描述: 输出和输出描述: 输入样例: 3 6 3 3 7 4 3 6 6 0 输出样例: NO YES 4 0 1 2 YES 1 1 1 1 1 1 分析: 数学思维题,赛后看了一…...
RabbitMQ 交换机的类型
在 RabbitMQ 中,交换机(Exchange)是一个核心组件,负责接收来自生产者的消息,并根据特定的路由规则将消息分发到相应的队列。交换机的存在改变了消息发送的模式,使得消息的路由更加灵活和高效。 交换机的类…...
机器人顶会参会经验——许华哲老师PRE-IROS 2024分享
摘要:清华大学交叉信息学院许华哲老师在PRE-IROS 2024上分享了机器人顶会参会技巧,包括社交和活动选择方面的实用建议等内容。本文整理了许老师在直播中分享的干货。 在刚刚过去的PRE-IROS 2024论文预分享会上,清华叉院许华哲老师全方位解析…...

计算机组成原理--一章二章
这里写目录标题 第一章:计算机系统概述计算机的发展计算机的组成计算机的性能指标 第二章:数据的表示和运算2.1进位十进制BCD码无符号整数的表示和运算带符号整数的表示和运算原反补码的特性对比移码定点小数 2.2奇偶校验码算数逻辑运算单元(…...
zookeeper kafka集群配置
一.下载安装包 地址:https://download.csdn.net/download/cyw8998/16579797 二.配置文件 zookeeper.properties dataDir/data/kafka/zookeeper_data/zookeeper # the port at which the clients will connect clientPort2181 # disable the per-ip limit on the…...

Java IO 基础知识
IO 流简介 IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在…...
【报错处理】MR/Spark 使用 BulkLoad 方式传输到 HBase 发生报错: NullPointerException
博主希望能够得到大家的点赞收藏支持!非常感谢 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! Spark 通过 BulkLoad 方式传输到 HBase,我发现会出现空指针异常。简单写下如何解决的。 原理…...
域7:安全运营 第17章 事件的预防和响应
第七域包括 16、17、18、19 章。 事件的预防和响应是安全运营管理的核心环节,对于组织有效识别、评估、控制和减轻网络安全威胁至关重要。这一过程是循环往复的,要求组织不断总结经验,优化策略,提升整体防护能力。通过持续的监测、…...

Linux常见基本指令 +外壳shell + 权限的理解
下面这篇文章主要介绍了一些Linux的基本指令及其周边知识, 以及shell的简单理解和权限的理解. 目录 前言1.基本指令及其周边知识1.1 ADD类touch [file]文件的时间mkdir [directory]cp [file/directory]echo [file]输出重定向Linux中, 一切皆文件 1.2 DELETE类rmdirrm通配符关机…...

Android Framework AMS(07)service组件启动分析-1(APP到AMS流程解读)
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读应用层service组件启动的2种方式startService和bindService,以及从APP层到AMS调用之间的打通。关注思维导图中左侧部分即…...
深度学习:领域适应(Domain Adaptation)详解
领域适应(Domain Adaptation)详解 领域适应是机器学习中的一个重要研究领域,它解决的问题是模型在一个领域(源域)上训练得到的知识如何迁移到另一个有所差异的领域(目标域)上。领域适应特别重要…...

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)
环境以用户需求安装Centos7.9,服务器使用9块900G硬盘,创建RAID1和RAID6,留一块作为热备盘。 使用笔记本通过HDM管理口()登录 使用VGA()线连接显示器和使用usb线连接键盘鼠标,进行窗…...

Linux实验三
Linux实验三 实验步骤: 一、登录进入 CentOS7 系统,打开并进入终端,使用 su root 切换到 root 用户 ; 二、将主机名称修改为 个人学号,并完成以下操作: 1、使用 uname -a 查看系统内核信息&#x…...
Vue预渲染:深入探索prerender-spa-plugin与vue-meta-info的联合应用
在前端开发的浪潮中,Vue.js凭借其轻量级、易上手和高效的特点,赢得了广大开发者的青睐。然而,单页面应用(SPA)在SEO方面的短板一直是开发者们需要面对的挑战。为了优化SEO,预渲染技术应运而生,而…...
使用`ThreadLocal`来优化鉴权逻辑并不能直接解决Web应用中session共享的问题
使用ThreadLocal来优化鉴权逻辑并不能直接解决Web应用中session共享的问题。实际上,ThreadLocal和session共享是两个不同的概念,它们解决的问题也不同。 ThreadLocal的作用 ThreadLocal是Java中提供的一个线程局部变量类,它可以让每个线程都拥有一个独立的变量副本,这样线…...
Python implement for PID
Python,serves as language for calculation of any domain 待更 Reference PID pythonPID git...
C++中的initializer_list类
目录 initializer_list类 介绍 基本使用 常见函数 initializer_list类 介绍 initializer_list类是C11新增的类,其原型如下: template<class T> class initializer_list; 有了initializer_list,一些容器也可以实现列表初始化&am…...

持续科技创新 高德亮相2024中国测绘地理信息科技年会
图为博览会期间, 自然资源部党组成员、副部长刘国洪前往高德企业展台参观。 10月15日,2024中国测绘地理信息科学技术年会暨中国测绘地理信息技术装备博览会在郑州召开。作为国内领先的地图厂商,高德地图凭借高精度高动态导航地图技术应用受邀参会。 本…...

深入理解HTTP Cookie
🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后,为什么下次访问B站就…...
Python多进程编程:使用`multiprocessing.Queue`进行进程间通信
Python多进程编程:使用multiprocessing.Queue进行进程间通信 1. 什么是multiprocessing.Queue?2. 为什么需要multiprocessing.Queue?3. 如何使用multiprocessing.Queue?3.1 基本用法3.2 队列的其他操作3.3 队列的阻塞与超时 4. 适…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...