04 2021 档案
摘要:题目链接 题解 可以发现,只有两相邻元素之间的差会对答案做出贡献。简单证明:设$i<k<j,a_i<a_j$,若$a_k>a_j>a_i$, 易得$a_k-a_i>a_j-a_i,k-i+1<j-i+1$,所以$\frac{a_k-a_i+a_k-a_j}{k-i+1}>\frac{j-i+1}$,
阅读全文
摘要:题目链接 题解 先处理一定无法入选的情况:将剩下的选票全部给$i$号人仍无法超过排名第$k$的人,或$i$号人无选票且没有剩余选票。然后是一定可以入选的情况:$i$号人有选票,并且使排名前$k+1$中所有选票少于他的人选票超过他所需选票$>m-a$,或者所有人均可入选。其余为有可能入选的情况。 具体
阅读全文
摘要:题目链接 题解 ⭐:若图中边权全部为$1$,BFS即可在$O(n+m)$的时间中求出单源最短路。 BFS+剪枝就可以啦(☆▽☆) BFS:对于每个位置,向上下左右4个方向拓展长度$k$,直接搜索。 剪枝:在拓展过程中(当前拓展到位置$(x,y)\(),只要发现一个无法更新的位置\)(tx,ty)$(
阅读全文
摘要:题目链接 题解 由于数据范围无法枚举$n$量级的次数,只得处理每个障碍物对答案的影响。可以发现,每个障碍物所在列的另一个方格无法被$2\times 1$的矩形覆盖,只能将矩形横过来,而这会使两行的覆盖错位(由左向右考虑)。这时我们需要下一个障碍物将其纠正,当相邻两障碍物同行且下标差为偶数,或异行且下
阅读全文
摘要:题目链接 题解 ⭐:有环图上的dp很可能需要多次转移,只得使用类SPFA而非Dijkstra算法 $d$数组Dijkstra预处理即可。然后建反向图,dp。 状态:$dp[i][j]$表示第i个节点是否(\(j=1/0\))已使用2操作时的答案。 转移方程: \[ dp[v][0]=min(dp[v
阅读全文
摘要:题目链接 题解 如果$M>A+R$的话(可能还要加上些奇奇怪怪的条件,总之就是全部弄成$M$最优的情况),把高度变为平均数一定最优,这样可以最大化使用$M$。如果$M$没有太大用处,而是要在$A,R$之间找平衡的话,可以发现最终高度一定为某个柱子的高度。简单证明:将$h$数组升序排序,设$h_i<r
阅读全文
摘要:题目链接 题解 ⭐:在有规律的矩阵中求最大值,可以考虑使用类最短路的搜索。 易得答案为$k$个格子覆盖次数和$\div (n-r+1)^2$,因此只需找出覆盖次数最大的$k$个格子。所以——打表找规律! 格子$(tx,ty)$被覆盖的次数如下:设$x=min(tx,n-tx+1),y=min(ty,
阅读全文
摘要:题目链接 题解 ⭐:$inf$若需多次加减不宜过大,容易溢出。 dp题呐~ 状态:$dp[i][j]$表示前$i$轮距离上次(包括当前卡牌)触发双倍已经经过$j$张卡时的最大伤害。 初始值:\(dp[i][j]=inf,dp[i][0]=0\quad (0\le i\le n,1\le j\le 9
阅读全文
摘要:题目链接 题解 仅在easy version上增加单调队列优化即可,简单版题解。但注意为使单调队列中数据为之前卡牌,需要倒序转移(与01背包滚动数组相似)。 AC代码 #include<bits/stdc++.h> #define int long long using namespace std;
阅读全文
摘要:题目链接 题解 dp+双指针,时间复杂度为$O(n)$。 状态:\(dp[i]\):当前最右区间结尾为$i$时是/否(\(1/0\))可行。 初始值:\(dp[0]=1,dp[i]=0\quad(1\le i\le n)\) 转移方程:将$a$数组升序排序,设$dp[i-1]$由$dp[lst]$转
阅读全文
摘要:题目链接 题解 $O(\sqrt n)$竟然能过!暴力的胜利 利用贪心思想,我们希望最大的城堡最高,这样总塔数最小。但是高堡需要比它低的城堡做铺垫,因此总趋势应该是先单调不降后单调不升(至少我们可以将之摆放成这样)。也就是设最高值为$sum$,一排城堡应如此:\(\{n,n+1,...,sum(,s
阅读全文
摘要:题目链接 题解 可以发现结尾只得为$00,25,50,75$,因此枚举这些数字将其放至结尾即可。若将$n$由右至左从$1$开始编号,将数字$a_i$移至末尾所需操作数为$i-1$。此外,若数对$00,25,50,75$的顺序是正确的,操作数须$-1$;若存在前缀0,需要增加前缀0个数的操作数。设$n
阅读全文

浙公网安备 33010602011771号