CF2049C 题解

news/2024/12/21 15:20:47/文章来源:https://www.cnblogs.com/Hanggoash/p/18620798

CF2049C 题解

关于MEX的构造题。

题意

有一个 \(n\) 元环,每个元素都和它的相邻元素是“朋友”。此外,额外给定一组 \(x,y\)\(x\)\(y\) 彼此也是 “朋友”。

求一种给 \(n\) 个元素填数的方案,使得对于任意一个 \(i\in[1,n]\),填在 \(i\) 这个位置的数 \(a_i\),是它所有“朋友”的数组成的集合的 MEX。

分析

从样例可以初步推测,我们填数用到的 \(a\) 并不会很大,只需要尝试在 \(0,1,2,3...\) 交替填就好了。

首先考虑不存在 \(x,y\) 限制的情况:

\(n\) 为偶数

这种情况很简单,不难想到随便选一个起点,一直按照 \(0,1\) 交替填就行。

\(n\) 为奇数

由于多了一个位置出来,我们发现刚刚的填数方案行不通了,这时候想一想是否能先钦定一个位置为 \(2\) ,然后剩下没填的坑只有偶数个了,回到了偶数情况,于是我们往后按照 \(0,1\) 交替填即可。

最后发现和 \(2\) 这个位置相邻的一定是一个 \(1\) 和一个 \(0\),是合法的,所以这种构造成立。

考虑 \(x,y\)

如果说引入 \(x,y\),相当于多了一条限制,需要去思考如何小幅度地修改,使得方案合法。

\(n\) 为偶数

如果 \(x\)\(y\) 是不相同的,那这条多出的限制对于原来的构造实际上没有影响,所以仍然成立。

如果 \(x\)\(y\) 相同,我们任意把其中一个修改为 \(2\) 即可。

\(n\) 为奇数

首先还是有:\(x\)\(y\) 不相同,不需要做任何修改,即使这里多了一个为 \(2\) 的数。

然后如果 \(x\)\(y\) 相同呢?这里赛时想了各种天马行空的构造,加了一堆特判,最后可能还是有corner case没判全,遗憾离场。

然而大可不必这样大费周折,只需要在构造的时候把 没有解决的情况 化归到 已经解决的情况上 即可。

这种情况的独特之处就在于:\(2\) 这个数是独一无二的,整个问题又是建立在环的意义下,所以我们不妨把所有的数同时顺时针移动,直到 \(2\) 旋转到 \(x\) 或者 \(y\) 的位置,就一定能保证 \(x\)\(y\) 处填的数不同,那么这样的构造就是合法的了。

Code

#include<bits/stdc++.h>
using namespace std;
int T,n,x,y;
const int N=2e5+10;
int a[N];
int get(int t)
{return t==n?1:t+1;
}
inline void solve()
{cin>>n>>x>>y;if(n%2==0){for(int i=1;i<=n;++i)a[i]=i%2;if(a[x]==a[y])a[y]=2;}else{a[x]=2;for(int i=get(x),w=0,cnt=1;cnt<=n-1;i=get(i),w^=1,++cnt)a[i]=w;}for(int i=1;i<=n;++i)cout<<a[i]<<" ";cout<<'\n';
}
int main()
{ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>T;while(T--){solve();}
}

总结

构造题从特殊情况开始考虑,然后尝试用特殊情况的解稍作变换,推及一般情况。

卡题太久就跳。

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

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

相关文章

移动端笔记应用,markdown应用选用

要求不能有广告。作为使用频率较高的软件,有广告就是恶心人。 支持markdown,包括且不限于代码块、标题、图片等格式。 支持同步,至少拥有WebDav云同步,或者本地导入导出。 全局搜索功能。以上功能必须免费,至少我不明白导入导出有什么好付费的。云同步这种付费理所当然。背…

一个.NET开源、易于使用的屏幕录制工具

前言 一款高效、易用的屏幕录制工具能够极大地提升我们的工作效率和用户体验,今天大姚给大家分享一个.NET开源、免费、易于使用的屏幕录制工具:Captura。 工具介绍 Captura是一款基于.NET开源、免费、易于使用的屏幕录制、截图工具,允许用户录制屏幕活动、捕获屏幕截图、录制…

CDN信息收集

引子:这篇是对架构信息收集中CDN部分的补充,由于Web应用先得注册域名才能使用CDN服务,而我国境内的域名注册需先要备案。又因为笔者目前并没有这方面的需求,因此本文仅简单介绍该如何识别CDN,以及一些常见的CDN绕过方式。免责声明:本文章仅用于交流学习,因文章内容而产生…

20结构伪类-borderz制图-网络字体-字体图标

一、结构伪类-:nth-child 在一些特殊的场景使用结构伪类还是非常方便的。 是真正有用的东西。 之前使用最主要的东西是nth-child() :nth-child(1)这个是选择父元素中的第一个子元素如果是下图这样就不能选中了。这里需要使用另外一个东西,叫做:nth-of-type()用这个东西可以选择…

【关节电机专栏】小米 CyberGear 电机和大然 PDA-04 CAN接口的区别

小米电机CAN接口:大然PDA-04 CAN接口:可见两家的CAN接口 CANL 和 CANH 是相反的。

BBU-Python期末考试复习题目总结

临近期末,抽个时间把BBU - python期末考试会考的题型(原题?)哈哈总结一下,放到我的个人bolg上供大家参考,祝考试高分通过————临近期末,抽个时间把BBU - python期末考试会考的题型(原题?)哈哈总结一下,python考试是比较简单的,题型分为选择题,判断题,填空题,程序…

老生常谈——分布式限流:部分Sentinal源码解读

基础知识HTTP CODE = 429 “请求过多”A. 限流的类型服务端客户端限流的标的IP用户...基本要求准确限制过量的请求。低延时。限流器不能拖慢HTTP响应时间。尽量占用较少的内存。这是一个分布式限流器,可以在多个服务器或者进程之间共享。需要处理异常。当用户的请求被拦截时,…

可扩展系统——基于SPI扩展

一、我们为什么讨论SPI? 为具有悠久历史的大型项目(屎山)添加新功能时,我们常常不太好评估变更的影响范围。因为原系统不具备良好的扩展性,导致修改整体发散,且不易单测。此时可以考虑使用接口来描述业务逻辑较为稳定的流程,并使用SPI机制来灵活的隔离加载实际的实现,来…

大模型--采样技术 TopK TopP 惩罚系数--37

目录1. 参考2. 概述重复惩罚(Repetition Penalty) 1. 参考 https://mp.weixin.qq.com/s/mBZA6PaMotJw7WeVdA359g 2. 概述 大型语言模型(LLMs)通过“根据上下文预测下一个 token 的概率分布”来生成文本。最简单的采样方法是贪心采样(Greedy Sampling),它在每一步选择概率…

关于分布式锁的的思考

关于分布式锁的的思考 结论先行: 对于分布式锁我们在考虑不同方案的时候需要先思考需要的效果是什么?为了效率(efficiency),协调各个客户端避免做重复的工作。即使锁偶尔失效了,只是可能把某些操作多做一遍而已,不会产生其它的不良后果。比如重复发送了一封同样的 email(…

2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸

2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸收来自第 i 位魔法师的能量后,你会立即被传送到第 (i + k) 位魔法师。在这个…