构造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. 适…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
