首页 > 其他分享 >think-cell Round 1 题解 (A~F)

think-cell Round 1 题解 (A~F)

时间:2024-02-18 16:45:44浏览次数:39  
标签:题解 tt1 cell 即可 mathop text rm think dp

think-cell Round 1 .

目录

A. Maximise The Score

排序后输出所有奇数位之和 .

B. Permutation Printing

\(1,n,2,n-1\cdots\) .

C. Lexicographically Largest

注意到对于一个 \(a_i\) 来说 \([a_i+1,a_i+i]\) 中的所有数都可以被选中,那么问题变给若干区间,每个区间选一个数要求组成的集合字典序最大 .

从大到小扫描每次能选则选即可 . 具体实现中可以按右端点排序扫一遍依次检查能不能选当前区间 .

D. Sum over all Substrings

注意到对于一个 \(p\)-good 的串 \(q\),如果 \(q_i=\tt1\) 那么它可以提供 \(p_{i-1},p_i,p_{i+1}\) 作为 \(\tt1\) 的区间,这样隔 3 个放一个则可以知道对于一个不包含 \(\tt 000\) 的段来说其答案就是 \(\lceil\frac{len}3\rceil\) . 暴力计算每一个子区间的答案即可通过 Easy Version .

对于 Hard Version,令 \(dp_i\) 表示 \([i,n]\) 所有前缀的答案,考虑在开头加一个字符的影响:

  • \(p_i=\tt 0\):并没有什么影响,\(dp_i=dp_{i+1}\) .
  • \(p_i=\tt 1\):可以设置 \(q_{i+1}=\tt1\) 来覆盖当前位,\(dp_i=dp_{i+3}+(n-i+1)\) .

那么就 \(\Theta(n)\) 解决问题了 .

E. 2..3...4.... Wonderful! Wonderful!

考虑如何判定一种最终局面能否被达成,考虑用一个长度为 \(n\) 的 01 串 \(s\) 表示,其中 \(s_i=0\) 则表示最终的序列中保留 \(i\),反之则是 \(i\) 被删除 .

断言:\(s\) 合法当且仅当 \(s_i\) 中存在一个 0 使得左右都有至少 \(k\) 个 1 且 1 的个数是 \(2k\) 的倍数 .

证明:

  • 如果这个 0 左右都有 \(k\) 个 1,直接操作一次即可 .
  • 如果 \(s\) 中共有 \(4k\) 个 1,以 1 多的一侧中中的某个 1 为中心操作一次即可归约至上一个情况 .
  • 其他情况,在某一侧随便只用 1 操作一次即可让对应侧 1 的个数减 \(2k\),不断进行操作即可归约至上一个情况 .

从而证明完毕 .

那么枚举 \(k\) 和剩下的元素数量 \(x\),单步容斥然后插板即可得出方案数为 \(\binom nx-\binom{x+2k-1}x\),可以简单计算 . 因为总枚举量是调和级数的所以时间复杂度为 \(\Theta(n\log n)\) .

F. Maximize the Difference

先考虑如何计算 \(f(b)\),固定 max 和 min 的取值 \(b_i,b_j\) 后考察 \(\max_x\{(b_i\mathop{\rm or}x)-(b_j\mathop{\rm or}x)\}\),按位考虑,不难发现只有 \(b_i\) 对应位为 0、\(b_j\) 对应位为 1 时或 \(x\) 这个操作才可能产生贡献,那么可以得到此时的答案就是 \(b_i\mathop{\rm and}\text{~}b_j\),其中 \(\text{~}x\) 是 \(x\) 按位取反后的值 .

那么就是要支持末尾插入,查询 \(\max\limits_{i,j}\{b_i\mathop{\rm and}\text{~}b_j\}\) . 考虑到 \(\sum n\) 有限制,维护集合 \(A,B\) 表示当前的 \(b_i\) 和 \(\text{~}b_i\) 二进制下所有子集组成的集合 . 每次插入的时候动态维护 \(A,B\),均摊下来最多进行 \(n\) 次插入,插入的时候动态维护 \(A\cap B\) 中元素的最大值即可 .

时间复杂度 \(O(\sum n+\sum q)\) .

标签:题解,tt1,cell,即可,mathop,text,rm,think,dp
From: https://www.cnblogs.com/CDOI-24374/p/18019508

相关文章

  • [ARC122E] Increasing LCMs 题解
    Description给定长度为\(N\)的正整数序列\(\{A_i\}\),满足\(A_i\)单调升。问是否能将\(\{A_i\}\)重排为序列\(\{x_i\}\),满足:令\(y_i=\operatorname{LCM}(x_1,\dots,x_i)\),\(\forall1\lei<N,y_i<y_{i+1}\)(即\(y_i\)单调升)。$1\\leq\N\\leq\......
  • ABC341E 题解
    看到01串的反转考虑维护异或差分序列\(s_i=a_i\oplusa_{i-1}\)。这样区间反转就变成了单点修改。然后考虑怎么查询:若一个区间\([l,r]\)是好区间,那么对于\(i\in[l+1,r]\)一定存在\(s_i=1\)。所以我们可以查询区间和来判断是否为好区间。使用线段树维护区间和即可,单......
  • 11.【题解】最短母串
    最短母串hzoi题解题意给你几个字符串,给你密码长度,之后求出密码有多少种可能,其中如果方案数\(\leq42\),则需要按字典序输出所有方案。题解首先先求出每两个字符串的最大重合,记为\(\largerel{_i}{_,}{_j}\)(\(relation\),在枚举时使用。(其实应该用\(dfs\)),但蒟蒻太蒻......
  • HH的项链——题解
    题目描述直接求解会导致不同贝壳在上个区间算过但这个区间没标记的情况,所以在求解时要把上个区间的标记转移到这个区间转移前先右边界由小到大排序,然后转移上个右边界到这个右边界的标记,同时记录上个标记出现的地方,方便转移下面附代码solution#include<bits/stdc++.h>using......
  • 区间最大子区间和——山海经题解
    区间最大子区间和规定:ls:区间靠左部分子区间最大和rs:区间靠右部分子区间最大和ms:区间子区间最大和s:区间和方程与数量关系如图所示,可以用动态规划解决山海经题解这题是上述方法在线段树中的应用solution#include<bits/stdc++.h>usingnamespacestd;constintmax......
  • 寒假训练——vj题解
    B-BM算日期M是一位数学高手,今天他迎来了Kita的挑战。Kita想让BM算出这几年内有多少个闰年。BM觉得这问题实在太简单了,于是Kita加大了难度。他先给出第一个年份,再给出一个整数。Kita要BM进行加法运算后得到第二个年份,然后算出这两个年份之间有多少个闰年。然......
  • ABC341G 题解
    blog。妈的,被trick干爆了。\(\textbf{Trick}\):将所有\(N_i=(i,\sum\limits_{j=1}^ia_j)\)视作一点,则区间\([l,r]\)的平均值为\((N_{l-1},N_r)\)的斜率。\(\textbf{Prove}\):由\(\text{slope}=\dfrac{y_2-y_1}{x_2-x_1}\)易证。根据这个trick,\(k\)的答案即为\(k......
  • think-cell Round 1
    叮!你的橙名体验卡已到期~Asort以后,是奇数项之和。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); intt; cin>>t; while(t--){ intn; cin>>n; vector<ll>v(n......
  • luogu2119题解
    本题考察对于枚举的方式对程序的性能的提升。有一个小的优化,\(n\)的范围比\(m\)的范围小,由于我们不关心顺序,我们既可以在值域上枚举也可以在物品上枚举,这里为了优化在值域上枚举更好。最简单的枚举是直接枚举\(a,b,c,d\)或是枚举其中三个数枚举另一个,时间复杂度为\(O(n^4)......
  • P10171题解
    P10171[DTCPC2024]取模题目传送门题解不会多项式导致的,赛后秒过。一个显然的结论:如果原序列有相等的数答案为\(0\),其次大于\(4\times10^5\)的\(k\)均符合要求。问题在于小于\(4\times10^5\)的答案。赛时想了很多奇妙的算法,诸如根号分治、线段树维护余数等等。其......