首页 > 其他分享 >CF1530G 题解

CF1530G 题解

时间:2024-04-05 10:46:39浏览次数:22  
标签:CF1530G 转换 题解 位置 操作 我们

考虑对操作进行转换。假设 \(a_i\) 为第 \(i\) 个 \(1\) 前面的 \(0\) 的个数。

则操作可以进行如下转换:

转换 1:选择一个长度为 \(k + 1\) 的子区间 \(a_{l ~ l + k}\)。我们先把 \(a_{l + 1 ~ l + k - 1}\) 翻转,然后更改 \(a_l\) 和 \(a_{l + k}\) 使得 \(a_l + a_{l + k}\) 不变。

转换 2:操作是可逆的,所以若我们能把 \(S, T\) 都转换成同一个字符串 \(I\),那么 \(S \rightarrow T\) 就是可行的。

于是现在的问题是能否把 \(S, T\) 转换成同一个 \(I\)。


现在我们想要把 \(a\) 数组不为 \(0\) 的值尽量往前移,且我们有 \(2\times n\) 的操作次数。

容易发现,当我们翻转了一个 \(a_{l ~ l + k}\) 时,我们可以让 \(\begin{cases}a_l = a_l + a{l + k}\\a_{l + k} = 0\end{cases}\),这样我们操作了 \(n - k\) 次后,只会有 \(a\) 的前 \(k + 2\) 个位置有值。


然后我们考虑如何把前 \(k + 2\) 个位置移到第 \(1\) 个位置。

若我们每次操作 \(a_{1 ~ k + 1}\) 和 \(a_{2 ~ k + 2}\),则每次 \(a_{2 ~ k + 1}\) 会先进行长度为 \(2\) 的循环位移,然后把前两个数设为 \(0\)。

经过 \(\lfloor \frac{k}{2} \rfloor \times 2\) 次操作后,\(\forall 2 \leq i \leq k + 1, a_i = 0\)。

然后,分类讨论。


先考虑 \(2 \ |\ k\) 的情况。我们发现,奇数编号的位置不可能转到偶数编号的位置,所以不可能。


再考虑 \(k\) 为奇数的情况。这时候,我们只要 \(a_{2, k + 2}\) 和 \(a_{1, k + 1}\) 轮流操作即可。次数 \(k + 1\)。

时间复杂度 \(\mathcal{O}(n ^ 2)\),操作次数最大为 \(n + k + 1\)。由于 \(k = n\) 时不可能存在解,所以满足限制。


代码咕了。

标签:CF1530G,转换,题解,位置,操作,我们
From: https://www.cnblogs.com/aemmprty/p/18115537

相关文章

  • 【蓝桥杯选拔赛真题56】C++求位数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编
    目录C++求位数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++求位数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现给定一个正整数N(1<N<10^8),输出N为几位数2、......
  • CF1924D Balanced Subsequences 题解
    先判掉\(k>\min(n,m)\)的情况。首先有个明显的计算最长合法括号子序列的贪心方法:初始一个值为\(0\)的计数器,从左到右枚举每个字符,遇到(时将计数器加一,遇到)时如果计数器不为\(0\)就减一然后将答案加一。考虑绘制它的折线图。初始时纵坐标为\(0\),从左到右枚举每个字符......
  • 小猫爬山 C++题解
    小猫爬山内存限制:256MiB时间限制:1000ms标准输入输出题目类型:传统评测方式:文本比较题目描述Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。Freda和rainbow只好花钱让它......
  • git clone失败问题解决
    gitclone失败问题解决背景当gitclone出现以下问题时:error:RPCfailed;curl92HTTP/2stream5wasnotclosedcleanly:CANCEL(err8)error:5492bytesofbodyarestillexpectedfetch-pack:unexpecteddisconnectwhilereadingsidebandpacketfatal:earlyE......
  • 小木棍 C++题解
    小木棍内存限制:1024MiB时间限制:1000ms标准输入输出题目类型:传统评测方式:文本比较题目描述乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50。现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。给出每......
  • 高手训练 负环 题解
    题目链接方向:枚举点的个数,找出其中边权和为负数的最小值。直接枚举显然会超时,不妨考虑使用倍增凑出点的个数(注意:点数不完全有单调性,但是后面会提到如何转化处理)。先预处理出\(dis_{t,i,j}\)表示经过\(t\)条边,从\(i\rightarrowj\)的最短路长度。那么类似\(Floyed\)显然......
  • 少儿编程 2024年3月电子学会图形化编程等级考试Scratch一级真题解析(选择题)
    2024年3月scratch编程等级考试一级真题选择题(共25题,每题2分,共50分)1、单击下列哪个按钮,能够让舞台变为“全屏模式”A、B、C、D、答案:C考点分析:考查scratch平台的使用,四个选项分别是:开始程序,停止程序,全屏模式,恢复正常模式,答案C2、下列哪个选项可以将当前背景换成第二......
  • win server系统物理机转成虚拟机出现 计算机丢失api-ms-win-crt-stdio-|1-1-0.dll问题
     物理机转移虚拟机的方案有很多种,这里讲下官方的这个转移工具转移,很简单下载下来一步步跟着点就好了。但是server系统的话可能会出现如图这样子的报错,缺少dll文件,这是因为server系统本身缺少这个文件组,解决方式有两种:1.去下载dll表文件,放置对应的文件夹下面,重新迁移2.利用......
  • C语言 | Leetcode C语言题解之第8题字符串转换整数atoi
    题目:题解:intmyAtoi(char*s){inti=0;intout=0;intpol=1;intlen=strlen(s);if(len==0)return0;while(s[i]=='')i++;//删除空格if(s[i]=='-'){//判断正负pol=-1;i++;}else......
  • Java | Leetcode Java题解之第10题正则表达式匹配
    题目:题解:classSolution{publicbooleanisMatch(Strings,Stringp){intm=s.length();intn=p.length();boolean[][]f=newboolean[m+1][n+1];f[0][0]=true;for(inti=0;i<=m;++i){......