首页 > 其他分享 >YC317A [ 20240708 CQYC省选模拟赛 T1 ] 划分(partition)

YC317A [ 20240708 CQYC省选模拟赛 T1 ] 划分(partition)

时间:2024-07-16 21:41:22浏览次数:22  
标签:20240708 省选 复杂度 partition 二进制 划分 le 最优

题意

给定一个长度为 \(n + m\) 的二进制数,你需要将这个二进制数划分别划分为长度为 \(n\) 的二进制数 \(a\) 与长度为 \(m\) 的二进制数 \(b\)。

你需要输出 \(a + b\) 的二进制形式。

\(n \le 10 ^ 6\)。

Sol

考虑发现一些性质。

设 \(n \ge m\),则:

考虑最优方案给 \(a\) 与 \(b\) 添加字符的过程,注意到一定存在一种最优方案,可以使得在 \(b\) 被填完之前,\(a\) 不会被填任何一个 \(0\)。

证明如下,由于可以交换 \(a\) 与 \(b\) 的任意位,所以我们可以认为在过程中 \(n - |a| \le m - |b|\),于是可以发现给 \(a\) 一直填 \(1\) 遇到 \(0\) 就给 \(b\),才会最优。

我们可以考虑设 \(i\) 表示给 \(a\) 分配 \([1, i]\) 中的 \(i - m\) 个 \(1\),剩下的分配给 \(b\),最后接上一段。

这样时间复杂度来到了 \((n + m) ^ 2\)。

平凡的,考虑 \(i + 1\) 对最终答案的贡献。

不难发现当 \(s_{i + 1} = 1\) 时对答案无贡献,当 \(s_{i + 1} = 0\) 时,会去掉 \(b\) 的最后一位 \(1\),给 \(a\) 的最后加上一个 \(1\)。

可以发现这两个递增递减操作会有交叉,直接找到这个交叉点即可。

时间复杂度:\(O(n + m)\)。

标签:20240708,省选,复杂度,partition,二进制,划分,le,最优
From: https://www.cnblogs.com/cxqghzj/p/18306175

相关文章

  • 20240708
    T2洛谷P2839Middle对于中位数,考虑二分,将数据中大于等于该数的标为\(1\),小于的标为\(0\),求和大于(等于)\(0\)则合法,否则非法。对于这个题,每次询问可以发现\([b,c]\)必选,前后两端不必全选。因此考虑前后两端的最大后/前缀和。接下来考虑如何快速标记。注意到当二分的数每次......
  • YC316B [ 20240706 CQYC省选模拟赛 T2 ] 题目描述(statement)
    题意给定两个长度为\(k\)的字符串\(s,t\)。设两个字符串的相似度为\(\sum_{i=1}^{k}[s_i=t_i]\)。给定\(n\)个操作,每次操作交换\((s_{x},s_{y})\),你需要求出对于所有\(\foralll,r,r-l+1\gem\)的相似度最大的\(l,r\)。\(n\le10^6,k\le20\)......
  • 【教学类-66-01】20240708通义万象下载的图片增加文件名
    背景需求:前期,通义万象下载的图片都是用“XX_XX”的数字表示今天我下载了建筑,如果文件名只有数字,根本不知道它是什么建筑。找到RPA读取的50个建筑的XCLX文件第1个生成的是“”埃菲尔铁塔”,下载时,它是最后一个第48个生成的是“东方明珠电视塔”,下载时,它是第一个......
  • YC312A [ 20240702 CQYC省选模拟赛 T1 ] 第一题(diyiti)
    题意给定一个长度为\(n\)的可重集,以及正整数\(k\)。设一个子集的价值为子集中最大值减去最小值,你需要将这个可重集划分为\(k\)个子集,使得价值之和最小,子集需要满足不重。\(n,k\le100\)。Sol思考一下发现如果不记录每个子集的信息是不好做的。考虑将所有子集的大小记......
  • 20240708比赛总结
    T1分糖果https://gxyzoj.com/d/hzoj/p/3752因为是三的倍数,所以按余数分为三种情况,分别是:3个0,3个1,3个2,012显然,当012的组数超过2时,就会出现3组相同余数的,所以枚举012的组数即可代码:#include<cstdio>#include<algorithm>usingnamespacestd;intn,a[100005],cnt[3],b[3][1......
  • YC311A [ 20240701 CQYC省选模拟赛 T1 ] 好串(good)
    题意给定一个长度为\(n\)的\(01\)串。定义一个串是好的当且仅当该串的所有前缀以及所有后缀的\(1\)的数量大于等于\(0\)的数量。你需要维护\(q\)个查询,每次求\(S_{l,...,r}\)的子串最少添加的\(1\)的个数使得该子串是好的。Sol首先不难发现一个正确的贪心,也......
  • 「杂题乱刷2」CF1454F Array Partition
    题目链接CF1454FArrayPartition解题思路我们发现显然第一个和第三个区间的值区间随着长度的增大而增大。于是我们就可以枚举第一个区间的右端点位置,然后现在问题就转化成了找到一个断点来确定第二,三个区间的长度,由于前文提到的第三个区间的值区间随着长度的增大而增大,于是我......
  • YC314A [ 20240704 CQYC省选模拟赛 T1 ] 士兵(solider)
    题意给定一张\(n\)个点\(m\)条边的有向图,每条边上有一个字母。\(q\)次询问,每次询问\(s\tot\)中的最短回文路径的长度是多少。\(n\le10^3,m\le10^5\)Sol区间\(\text{dp}\),设\(f_{i,j}\)表示从\(i\)到\(j\)的最短回文路径的长度。每次枚举一条边\(......
  • P10218 [省选联考 2024] 魔法手杖 题解
    题目描述:给定序列\(a_1,\cdots,a_n\)和\(b_1,\cdots,b_n\),满足\(a_i\in[0,2^k-1],b_i\ge0\),你需要给出\(S\subseteq\{1,\cdots,n\}\)和\(x\in[0,2^k-1]\)满足:\(\sum\limits_{i\inS}b_i\lem\)。最大化\(val(S,x)=\min\big(\min\limits_{i\inS......
  • YC309A [ 20240627 CQYC省选模拟赛 T1 ] 或(or)
    题意给定一个可重集\(S\),求所有的前缀的集合的代价。定义一个集合的代价为:\[\max_x\left((\max_ib_i\lvertx)-(\min_ib_i\lvertx)\right)\]\(n\le10^6,V\le2\times10^6\)Sol首先看到这个式子直接开划。称较大的数为\(b_i\),较小的数为\(b_j\)。直......