ARC071 - 077
前面的场次有时间再写吧,省选之前做的,也不知道都忘成什么样了。
\(\texttt{ARC071}\)
E
简单题目。
考虑先一气呵成,将两个数组里面所有的 \(A\to BB\),然后看两个数组长度之差是不是 \(3\) 的倍数即可。
F
略微需要推一下的简单题。
发现一旦出现了 \(x,y,.....\) 且 \(x \ge 2, y\ge 2\),那么显然 \(y\) 之后的所有数都只能填 \(y\)。
那么整个数组应该大致就长下面这样:
\(x_1,1,...,1,x_2,1,...,1,x_3,1,...,1,...,x_m,y,y,y,....\) 。(当然 \(x_i\) 后面的 \(1\) 个个数要 \(>x_i\)。)
然后对于 \(x_i,1,...,1\) 这一部分,考虑一个简单 \(dp\),用一个前缀和优化即可。
最后统计答案的时候再把最后的 \(x_m,y,y,y,...\) 这种情况算进去即可。
具体系数这里就懒得写了,时间复杂度 \(\mathcal{O}(n)\),其实真要卡的话应该是可以用矩阵快速幂做到 \(\mathcal{O}(\log n)\) 的,不过并不重要。
\(\texttt{ARC072}\)
D
感觉自己唐到没边。
显然,对于先手,如果 \(|x-y|> 1\),他总是有办法让 \(|x-y|\le 1\),反之如果 \(|x-y|\le 1\),如果能移动,那么先手无论怎么操作,操作之后 \(|x-y|>1\),而结束状态也一定满足 \(|x-y|\le 1\) 这个条件,于是直接判断 \(|x-y|\) 和 \(1\) 的大小关系即可。
博弈论还是要多观察终止状态的样例的规律啊!
E
首先,无论如何,距离终点的距离都是在减小的。
如果 \(d_i\) 发生改变,\(i-1\) 及之前的贡献是不会受到影响的,可以直接预处理得到。
相当于我们需要知道 \(i+1\to n\) 这一段后缀,开始这段后缀之前,距离终点在什么范围的时候,能/不能够通过这段后缀的 \(d_j\) 来走到终点。得到范围之后就能判断改变 \(d_i\) 能否有办法让其走不到终点了。
具体来说,假设走完前 \(i-1\) 条指令,距离终点的距离为 \(x\) 米,现在我们要改变 \(d_i\) 来让其不合法。换言之,\(d_i\) 无论怎么变化,到 \(i+1\) 条指令时,到终点的距离一定在 \([0,x]\) 以内,如果这里面的所有值后面这段后缀的指令都能让他走到终点,那么就是无解,否则就是有解。
考虑如何来判断这个东西。
其实我们只需要维护 \(i+1\to n\) 这段后缀中,最小的到达不了终点的距离,假设是 \(\text{minn}_i\)。如果 \(x\ge \text{minn}_i\) 那么就是 YES,否则就是 NO。
首先有 \(\text{minn}_n=1\)。
考虑如何从 \(\text{minn}_i\to \text{minn}_{i-1}\)。
如果 \(\text{minn}_i \le \lfloor \frac{a_{i-1}}{2}\rfloor\),那么就算有了 \(a_{i-1}\),这个最小到不了的终点的距离也是无法改变的,即 \(\text{minn}_{i-1}=\text{minn}_i\)。
否则,距离在 \([\lfloor \frac{a_{i-1}}{2}\rfloor+1,a_{i-1}]\) 的这一段,显然可以通过 \(a_{i-1}\),走到距离为 \([0,\lfloor \frac{a_{i-1}}{2}\rfloor]\) 的这一段,而这一段都可以到终点。所以到不了终点的最小点在 \(>a_{i-1}\) 中,容易发现有了 \(a_{i-1}\) 的作用之后,就是 \(\text{minn}_{i-1}=\text{minn}_i+a_{i-1}\)。
然后就做完了,时间复杂度 \(\mathcal{O}(n+q)\)。
F
以前做过,但是为什么我一点印象也没有捏。
仔细思考以下,发现对于第 \(i\) 天来说,可以考虑维护一个前 \(i-1\) 天,有关温度和水量的一个单调队列,即从头到尾,温度越高,水量越低。
然后看能不能混合之类的,稍微处理一下就行了。
重点是要去挖掘能够维护单调队列的性质。
时间复杂度 \(\mathcal{O}(n)\)。
\(\texttt{ARC073}\)
D
非常常规的背包吧,好像初学的时候还没做起。
有一个 \(w_1\le w_i\le w_1+3\)。
考虑直接定义 \(dp_{i,j,k}\) 表示前 \(i\) 个物品,容量为 \(w_1\times j+k\) 可以拿走的最大价值。
没什么好说的,随便转移。时间复杂度 \(\mathcal{O}(n^3)\)。
E
我怎么感觉这题我以前看谁刷到过来着(?
考虑钦定全局最大值是 \(R_{max}\),然后进行分类讨论。
- 全局最小值是 \(R_{min}\)。应该可以去二分 \(B_{max}-B_{min}\),然后看有没有合法的构造。
- 全局最小值是 \(B_{min}\)。好像比想象的要复杂一点。考虑去枚举 \(R_{min}\),找到满足条件的最小的 \(B_{max}\)。对于每个包 \((x,y)\),假设 \(x<y\),如果 \(R_{min}\in [x,y]\),显然 \(y\) 涂红色,\(x\) 涂蓝色。如果 \(R_{min}>y\),这个显然不合法。如果 \(R_{min}<x\),要让 \(B_{max}\) 小,所以把 \(x\) 涂给蓝色,\(y\) 涂红色。这个过程应该可以通过一个正常扫描一遍来维护。不对,我是不是直接把 \(x\) 给 \(B\),\(y\) 给 \(R\),这样直接贪就行了,我唐了。
时间复杂度 \(\mathcal{O}(n\log^2 n)\),可能是我实现太劣了,应该可以单 \(\log\)。
甚至最开始还被卡常了。
F
总有一种与 CSP-T3 相似的即视感。
首先完成第 \(i\) 个要求之前,我们知道两个棋子,有一个一定是在 \(x_{i-1}\) 这个位置上,另外一个棋子可以维护一颗线段树,下标是另外一个棋子的位置,里面维护的值就是达到当前状态的最小代价,然后节点上维护区间最小值即可。
从 \(i-1\to i\) 应该就是刻画在线段树上的一个区间查询 \(\text{val} + i, \text{val} - i\) 的最小值,以及一个单点修改和全局加。
秒了,时间复杂度 \(\mathcal{O}(Q\log n)\)。
\(\texttt{ARC074}\)
D
我是什么高级人类想这个题想了这么久啊。
直接考虑枚举剩下的 \(2\times N\) 个数的前后分界点,然后你就知道前面删了多少个数,后面删了多少个数,然后前面删大的,后面删小的,随便打个堆维护下即可。
时间复杂度 \(\mathcal{O}(n\log n)\)。
E
简单 DP。
定义 \(dp_{i,j,k}\) 表示,填完 \(1\to i\),从后往前第一个和 \(i\) 颜色不相同的位置是 \(j\),第一个和 \(i,j\) 颜色都不同的位置是 \(k\),满足所有 \(r\le i\) 的限制的方案数。
转移非常简单:
- \(i\) 和 \(i-1\) 填一样的颜色:\(dp_{i,j,k} = dp_{i-1,j,k}\)
- \(i\) 和 \(j\) 填一样的颜色:\(dp_{i,i-1,k}=dp_{i-1,j,k}\)
- \(i\) 和 \(k\) 填一样的颜色:\(dp_{i,i-1,j}=dp_{i-1,j,k}\)
三种转移都进行一遍,然后转移完 \(i\) 之后,将 \((l,i,x)\) 所有不合法的状态清零即可。
时间复杂度 \(\mathcal{O}(n^3+m\times n^2)\)。
F
2208 的紫题还是很少见的。
网络流学太烂了,甚至不知道删掉一些点让两个点不联通的最小代价是最小割模型。(当然需要把边和点互相转化以下。)
直接建边的话在 \(\mathcal{O}(n^3)\) 级别,显然无法通过。
发现可以对于每行每列建立一个虚点,然后分别向这一行这一列上的所有点建双向边,然后此时边数在 \(\mathcal{O}(n^2)\) 级别,直接跑最小割就可以通过了。
\(\texttt{ARC075}\)
D
简单题,直接二分答案,然后看每一项至少要用多少次 \(A\),然后看加起来是否小于 \(\text{mid}\) 即可。
E
随便转化以下,将每个 \(a_i\) 减去 \(k\),然后求出前缀和数组 \(s\)。相当于求 \(\sum_{i=1}^n \sum_{j=0}^{i - 1}[s_i \ge s_j]\)
直接二维偏序就完了。
F
做不起蓝题,笑死。
考虑去分析一下:对于 \(N=\overline {abcd}\),发现 \(\text{rev}(N)-N=(d-a)\times 999+(c - b)\times 90\)。
再写一些位数多一点的,发现这些系数就是 \(9999999, 999990, 99900, 9000\)。
且可以发现相邻两个系数数量级差距很大,是没有办法被弥补回来的。
至于 \((d-a),(c-b)\) 这些系数的值,可以发现要么是一种负数,要么是一种整数,也就是说最多只有两种。
然后再求下方案数即可,时间复杂度 \(\mathcal{O}(2^L)\),其中 \(L\) 是输入的数的位数。
\(\texttt{ARC076}\)
D
可以发现每个点有用的边,只有距离他 \(x\) 坐标最近的和 \(y\) 最近的,把这些边全部建上,跑一遍最小生成树即可。
E
先猜一手,感觉只有在边界上的两个点才有可能把这个网格隔开。
然后隔开之后看有没有不合法的应该就行了。(显然不合法也只有可能两个端点都在边界上)
至于有没有应该直接维护以下就行了?(你把端点都在边界上的点连起来,看以后没有交点就行了。)
暴力维护是可以的,但是好像不相交可以看成一种括号序列(?
F
之前做过的题,还略微有些印象。
之前直接看贪心题解跑路了,这里写一下严谨的扩展 \(\text{Hall}\) 定理做法。
可以直接转化为二分图模型,由扩展霍尔定理,本题相当于求解 \(\max_{S\subseteq V_L} \{|S|-|\bigcup _{v\in S}N(v)|\}\)。
发现这个邻域是两个区间,不好处理,考虑把并转化为转化为 \(m\) 减去补集的交集,然后写一下式子,枚举交集 \(l_i\) 的端点位置,然后扫描线应该就行了。
\(\texttt{ARC077}\)
D
设重复数字的位置分别是 \(l,r\)
忙猜选 \(i\) 个答案是 \(C_{n+1}^{i}-C_{n+1-(r-l+1)}^{i-1}\)(当然,\(i=1\) 的时候特判以下即可。)

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号