首页 > 其他分享 >CF1935 A-C题解

CF1935 A-C题解

时间:2024-03-19 18:58:11浏览次数:20  
标签:pre 题解 sum CF1935 枚举 情况 mex 翻转

A

设 \(s\) 翻转后的字符串为 \(t\),考虑进行 \(n\) 次操作可能生成出哪些字符串:

  1. 只进行翻转操作——\(s\);
  2. 先复制再 \(n-1\) 次翻转——\(s+t\);
  3. 先翻转,再复制,再翻转 \(n-2\) 次,\(t+s\);
  4. 多次复制的情况。

情况 2 显然劣于情况 1;情况 4 得到的字符串的开头一定是 \(s\) 或者 \(t\),分别劣于情况 1,3。所以答案一定在情况 1,3 中选择——不难发现,如果 \(s\) 字典序小于 \(t\),答案是情况 1 的 \(s\),否则答案是情况 3 的 \(t+s\)。

B

不难发现,但凡能分成多段,一定可以分成两段。分成两段,朴素的想法是枚举分界点,对两段分别求 mex。恰好前缀 mex 可以 \(O(n)\) 求,故求出前缀 mex \(pre_i\) 和后缀 mex \(suf_i\),枚举找到到 \(pre_i=suf_{i+1}\) 位置即可。

求前缀 mex:开 bool 数组 \(v\) 和 mex 指针 \(p\)。遍历到 \(a_i\) 时将 \(v_{a_i}\) 设为 true,并将 \(p\) 向后移动到 \(v_i\) 为 false 的位置,\(pre_i\gets p\)。在不断添加 \(a_i\) 的过程中,\(p\) 一定单调递增,复杂度为 \(O(n)\)。

C

重要性质:如果将信息按照 \(b_i\) 排序,在选定了最小的 \(b_l\) 和最大的 \(b_r\) 的情况下,我们任选 \(l<i<r\) 都不会对式子关于 \(b_i\) 的部分产生影响,只需要考虑含 \(a_i\) 的部分即可。

一个显然的想法是枚举 \(l,r\),然后对 \(i\in [l,r]\) 的 \(a_i\) 排序,贪心地从小到大选取,使总和不超过 \(L\),选出的信息条数与答案取 max。这个复杂度是 \(O(n^3\log n)\) 的,考虑怎么优化。

在定了 \(l\),枚举 \(r\) 的过程中,我们可以记录一下经过的 \(a_i\) 的和 \(sum\)。一旦 \(sum+\sum\mid b_{p_{i+1}}-b_{p_i}\mid>L\),就从 \(sum\) 里从大到小减掉一些 \(a_i\),这可以用优先队列维护。然后用当前队列 size 对答案取 max 即可。

标签:pre,题解,sum,CF1935,枚举,情况,mex,翻转
From: https://www.cnblogs.com/th19/p/18083102

相关文章

  • 初三多项式的运算练习 题解
    初三多项式的运算练习题解美好的下午时光要拿来写题解呜呜呜,一篇一篇地鸽得了。有些题要用到GF的知识,或许我可以找时间讲一下?贴一份我的FFT和NTT的板子。FFT:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intn,m,limit,f[1<<22],g[1......
  • 洛谷 P2934 [USACO09JAN] Safe Travel G 题解
    前话貌似别人都是使用并查集维护的方法,然而由于排序、最短路等算法瓶颈,以下令\(n\)和\(m\)同阶,总的时间复杂度依然是\(\Theta(n\logn)\)的,那么并查集是否有点大材小用了。事实上,在建完最短路径树后,我给出了两种带\(\log\)的数据结构完成此题。题目分析翻译里已经把问......
  • 腾讯春招内参:2024最全Spring Boot面试题解析,技术精英必备!
    随着2024年春季招聘季的来临,腾讯再次开启了对富有才华和创新精神的技术人才的寻找之旅。作为一家全球领先的互联网科技公司,腾讯在寻找那些不仅拥有扎实的技术基础,而且能够适应快速发展和变化的行业环境的候选人。在众多技术栈中,SpringBoot作为简化Spring应用开发的工具,因其......
  • AtCoder Beginner Contest 345 A-F 题解
    A-LeftrightarrowQuestion给你一个由<、=和>组成的字符串\(S\)。请判断\(S\)是否是双向箭头字符串。字符串\(S\)是双向箭头字符串,当且仅当存在一个正整数\(k\),使得\(S\)是一个<、\(k\)个=和一个>的连接,且顺序如此,长度为\((k+2)\)。Solution按照题意......
  • 分月饼【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-分月饼中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,单人分到最多月饼的个数是Max1,单人分到第二多月饼个数是Max2,Max1-Max2<=3,单人分到第n-1多月饼个数是Max(n-1),单人分到第n多月饼个数是Max(n),Max(n-1)–Max(n)<=3,问有多少......
  • ARC174C 题解
    blog。官解似乎很难想到,这里是容易想到的方法。显然是DP。介于轮数可能趋近于无穷,所以类似P4550做即可。设\(f_i,g_i\)表示已经抽了\(i\)个数,当前是Alice或Bob抽的,期望罚款。倒推处理,\(f_n=g_n=0\)。下文中\(p=\dfracin\)表示抽到已经有的概率。\[\large\begin......
  • [极客大挑战 2019]web部分题解(sql部分已完结,其他部分正在更新)
    SQL部分:[极客大挑战2019]BabySQL打开环境后有登录界面◕‿◕一眼注入,后先试试万能密码:username:admin'or'1'='1password:1 GG,出大问题,我就会这一招啊O.o??完结撒花(不是꒰ঌ(⌯''⌯)໒꒱开玩笑的,着看着像是过滤了or后来尝试了一下oorr双写发现也不行,那咱继续注入哈:尝试......
  • 题解:CF1941G Rudolf and Subway
    原题链接简化题意一个无向连通图中将边分成了不同颜色(保证同种颜色联通),问从\(b\)到\(e\)最短需要经过几种颜色思路考虑因为同种颜色联通,可直接在读入的时候开两个vector分别存每个点属于的颜色及每种颜色有哪些点,又因为颜色数字可能跨度比较大,最好另开一个存颜色的种......
  • P9077 [PA2018] Poddrzewo 题解
    思考感觉题目有点迷惑的意思,要最小化操作\(1\)使用的次数,也就是要节约修改操作,让我们认为操作\(1\)是最有用的,其实只要稍微动动脑子想一想,删除操作才是最有用的,而交换操作根本没用。当将序列删除到只剩两个点时,就把两个点连上,度都为\(1\)。所以如果序列中\(1\)的数量超......
  • 亲子游戏【华为OD机试JAVA&Python&C++&JS题解】
    题目描述宝宝和妈妈参加亲子游戏,在一个二维矩阵(NN)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障碍物的格子,只能上下......