CF Round 1006 (Div. 3) Problem C 题解

news/2025/3/9 22:40:36/文章来源:https://www.cnblogs.com/koishil/p/18761550

CF Round 1006 (Div. 3) Problem C 题解

题目传送门

萌新第一次写题解, 表达不清请见谅, 本篇题解是想把本人做题时的想法整理下来, 更优秀的题解请移步CF。

本题涉及到 \(MEX\) (在一个整数集合中从 \(0\) 开始第一个没出现的整数), 这种题一般用贪心的方法得到 \(MEX\) 的最大值, 本题也是如此。

分析题目可以得到这样的结论,最终输出的数列可以是从 \(0\) 一直到某个数 \(k\) ,然后在数列的末尾再加上 \(x\) ,但是如果之前的数列进行或运算( \(a|b\) )后已经满足条件,就不用加 \(x\)

这样问题的关键就转换为 \(k\) 是多少, 先考虑 \(n\) 足够大的情况, 对于给定的 \(x\), 把它转换为二进制后, 每一个 \(0\) 位都像是把这一位给占住了, 要输出的数列中的任何一个数转换为二进制后被占住的位都不能是 \(1\), 否则或运算后一定不等于 \(x\)。 顺着这个思路想, 就很容易得到 \(k\) 是怎么算出来的: \(k\) 就是 \(x\) 最低位 \(0\) 之前的 \(1\) 组成的二进制数。 例如,当 \(x = 111011011\) 时, \(k = 11\)。 别忘了现在是在讨论 \(n\) 足够大的情况。

为了避免混淆, 将以上方法求出的 \(k\) 记为 \(k_{max}\)。 当 \(n - 1> k_{max}+1\) 时(为什么是这个条件, 这一点请仔细思考), 前面从 \(0\)\(k_{max}\) 全都占满了, 一共 \(k_{max}+1\) 个数, 数组剩下的长度可以全都填 \(x\)。 再考虑 \(n - 1 \le k_{max}+1\) 的情况, 先对从 \(0\)\(n-1\), 长度为 \(n\) 的数组进行或运算, 如果结果等于 \(x\), 则答案就是从 \(0\)\(n-1\) 数组, 如果不等于 \(x\), 则答案是从 \(0\)\(n-2\) 末尾加上 \(x\)

下面贴上AC代码:

#include <bits/stdc++.h>
using namespace std;void solve(){int n,x;cin >> n >> x;int k=0,cx=1,xc = x;while(x&1){k+=cx;cx*=2;x/=2;}if(n-1>k+1){for(int i=0;i<n;i++){if(i<k+1) cout << i << ' ';else cout << xc << ' ';}}else{int ans = 0;for(int i=0;i<=n-2;i++){cout << i << ' ';ans |= i;}if((ans|(n-1))==xc) cout << n-1;else  cout << xc;}cout << endl;
}int main(){int t = 1;cin >> t;while(t--){solve();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言实验一作业

实验任务1:#include <stdio.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");printf(" O \n");printf("<H>\n");printf("I I\n");return 0; }#include <stdio.h> in…

二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)@目录二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)2.1 开发环境2.2 创建maven工程2.3 创建User实体2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.7配置日志打印2.8 通过junit测…

MongoDB 的开源替代方案FerretD发了 2.0 版

FerretDB 宣布推出 2.0 版本,由 DocumentDB 驱动,作为 MongoDB 的开源替代方案。它带来性能提升、功能兼容性、向量搜索能力和复制支持。FerretDB 基于 Apache 2.0 许可发布,与 MongoDB 的驱动程序和工具兼容,可作为 MongoDB 5.0 及以上版本的直接替代品。FerretDB 2.x 利用…

Project(2)--WBS任务

创建工作分解结构WBS 创建一个初始的项目计划分成三步,依次是创建工作分解结构 设置任务之间的依赖关系 估算工期 选择“自动计划”设置所有新项目 “文件”-》“选项”-》“日程”-》显示层级关系“格式”-》显示大纲数字,查看任务之间的层级关系修改层级关系 选择“任务”-…

Day08_cmd命令

Java cmd命令 盘符切换查看当前目录下的所有文件:dir 切换目录:cd(例如:cd .. 返回上级目录)系统操作清理屏幕:cls 退出终端:exit 查看电脑IP:ipconfig打开应用程序计算器:calc 画图工具:mspaint 记事本:notepad网络命令测试网络连接:ping www.baidu.com文件与目录…

react虚拟dom是什么?是如何提升性能的

虚拟dom是react的核心概念,它使用js对象来反应真实dom的结构。 当组件的状态变更后,react会计算出新的虚拟dom树,并跟前一次的虚拟dom树进行对比,找出差异(也就是需要更新的部分),最后仅将这些差异应用到真实 DOM 中。通过这种方式,React 避免了对真实 DOM 的频繁操作,…

021 Vue加载Element-plus的字体图标

Element-plus不仅是提供了各种组件,同时还提供了一整套的字体图标方便开发者使用 安装icons字体图标 npm install @element-plus/icons-vue 全局注册 在项目目录下,创建plugins文件夹,在文件夹下创建文件icons.js文件plugins 代表插件的意思import * as components from &q…

借助Deepseek写一个python代码来绘画一个五星红旗

第一次我输入“写一个绘制五星红旗的代码”获得了代码如下,但是它并不能进行正常运行,出现了“AttributeError: Screen object has no attribute title on line 6”这样的错误。 点击查看代码 import turtle# 设置屏幕 screen = turtle.Screen() screen.bgcolor("white&…

【程设の旅】第一次上机卡题复盘

别急,先来张美图不开玩笑了 总结一下,就是感觉目前的思维方式还没有完全形成 有点靠惯性做题,虽然出来了九道,但是还是有点打野拳的感觉 第一卡的是4 04:编程填空:两种计数 描述 填写代码,使输出结果为 0 2 1 11 7 11 4 3 #include <iostream> using namespace std…

Vue3创建

1.创建2.导入idea修改调试 (修剪)(修改)HomeView.vue点击查看代码 <template><div>Hollow World</div> </template><!--setup 代表可以使用Vue3的语法特性--> <script setup></script>(精简路由)index.js点击查看代码import { c…

使用vim编辑器和nmcli的方法配置静态网络

目录使用vim编辑器修改网络配置使用nmcli命令配置网络 使用vim编辑器修改网络配置关于vim编辑器的使用方法注意:以下配置都是在NAT网络模式下进行操作的第一步 确定好虚拟机IP网段并确定网关:vim /etc/sysconfig/network-scripts/ifcfg-ens160 #注意上面的ens160可能与你的电…

C++实验

实验1#include<stdio.h> int main() {int x,y,i;i=0;printf("打印次数:");scanf("%i",&x);printf("打印方向(0为竖,1为横向):");scanf("%i",&y);if(y==0) {while(i<x){printf(" o \n");printf("…