![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【算法】差分与前缀和思想
文章平均质量分 90
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【CodeForces】Codeforces Round 583
比赛链接点击打开链接官方题解点击打开链接Problem A*. Optimal Currency Exchange注意到美元所有的面值均为 111 的倍数,不妨认为只可以兑换 111 美元。类似地,也可以认为只可以兑换 555 欧元。则我们需要使得 xd+5yexd+5yexd+5ye 尽可能接近 NNN 。枚举 yyy ,并用除法计算可能到达的最近的值即可。时间复杂度 O...原创 2019-09-05 14:12:56 · 265 阅读 · 0 评论 -
【校内训练2019-02-19】小b爱取模
【思路要点】考虑数列的差分数组,我们希望通过尽可能少的对差分数组的的前后两个位置 i,j (i<j)i,j\ (i<j)i,j (i<j) 分别进行 +1,−1+1,-1+1,−1 的操作使得其变成一个模意义下的全 000 数组。对于 k=2,3k=2,3k=2,3 的情况,简单设计贪心即可,具体可见代码。一个值得注意的性质是原创 2019-02-21 11:29:05 · 465 阅读 · 0 评论 -
【USACO】2019 January Contest, Platinum题解
**【T1】**Redistricting【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】将 GGG 看做 +1+1+1 , HHH 看做 −1-1−1 ,记原数组前缀和为 sis_isi 。则可以得到动态规划 dpi=∑j=1kdpi−j+[si−si−j≥0]dp_{i}=\sum_{j=1}^{k}dp_{i-j}+[s_i-s_{i-j}≥0...原创 2019-01-25 21:23:06 · 1047 阅读 · 0 评论 -
【CodeForces】CodeForces Round #530 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Sum in the tree【思路要点】题目中给出的限制条件相当于限定了所有深度为奇数的点及其父亲的权值和,显然,将深度为偶数的非叶节点的权值设置得尽可能大有利于减少全局权值和。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h>usi...原创 2019-01-20 11:30:34 · 578 阅读 · 0 评论 -
【省内训练2018-12-21】Chocolate
【思路要点】首先,定义 ttt 次成功率为 ppp 的操作恰好成功 xxx 次的概率为 ft,p(x)f_{t,p}(x)ft,p(x) ,有 ft,p(x)=px(1−p)t−x(tx)f_{t,p}(x)=p^x(1-p)^{t-x}\binom{t}{x}ft,p(x)=px(1−p)t−x(xt) 。对于任意一行,留下的部分是区间 [l,r][l,r][l,r] 的概率为 ...原创 2018-12-22 16:59:54 · 325 阅读 · 0 评论 -
【CodeChef】Imagine Polygons
【题目链接】点击打开链接【思路要点】首先显然的一点是当且仅当两个多边形在 xxx 轴上的跨度不一样,输出 −1-1−1 。考虑一个 xxx 轴上的坐标 iii ,在满足 x=ix=ix=i 的平面上的任意一点 (i,y,z)(i,y,z)(i,y,z) 能够被计入答案当且仅当 (i,y)(i,y)(i,y) 在 x−yx-yx−y 轴的投影多边形内, (i,z)(i,z)(i,...原创 2018-12-09 12:59:51 · 225 阅读 · 0 评论 -
【LOJ2262】「CTSC2017」网络
【题目链接】点击打开链接【思路要点】首先,本题一点重要的观察是,新建的路径的两个端点必定在树的直径上,若一个方案新建路径的两个端点有一个不在直径上,我们令其向直径靠近,不会使答案变劣。因此,我们可以将直径拿出来考虑,令直径上点数为 tottottot ,每一个点为 posipos_iposi , posipos_iposi 与 posi−1pos_{i-1}posi−1 ...原创 2018-11-02 21:30:52 · 935 阅读 · 1 评论 -
【CodeForces】Mail.Ru Cup 2018 Round 1 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Elevator or Stairs?【思路要点】按照题意计算两种方式的用时,取较优的方案采纳。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5...原创 2018-10-21 14:28:31 · 769 阅读 · 1 评论 -
【CodeForces】Lyft Level 5 Challenge 2018 - Elimination Round (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**King Escape【思路要点】皇后会攻击到 888 条直线,其中 444 条斜向的可以跨过,因此可以忽略。判断起始点和目标点是否在其余 444 条线分割出的同一个联通块内即可。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>us...原创 2018-10-10 15:16:22 · 353 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace ...原创 2018-10-21 10:46:08 · 428 阅读 · 0 评论 -
【CodeChef】September Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【ANDSQR】**AND Square Subsegments【思路要点】离线询问,按左端点排序。枚举区间的左端点 lll ,区间 [l,i][l,i][l,i] 的 andandand 和至多变化 O(LogV)O(LogV)O(LogV) 次,二分找到分界点,并找到其中是完全平方数的。每一段 andandand 和相同的区间 [l,i][l...原创 2018-10-06 16:04:18 · 312 阅读 · 0 评论 -
【LOJ2327】「清华集训 2017」福若格斯
【题目链接】点击打开链接【思路要点】 Matrix67Matrix67Matrix67 一篇关于 surreal&nbsp;numbersurreal\ numbersurreal&nbsp;number 的博客 。考虑用 surreal&nbsp;numbersurreal\ numbersurreal&nbsp;number 解决不平等博弈问题。手动绘制转移图,计算出各个...原创 2018-10-12 13:08:46 · 812 阅读 · 0 评论 -
【CodeForces】CodeForces Round #512 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Vasya and Triangle【思路要点】任何三格点角形的面积均是 0.50.50.5 的整数倍,因此当 2∗N∗M2*N*M2∗N∗M 不是 kkk 的倍数,问题无解。否则,令 g=gcd(N,k),tnp=Ng,tmp=M∗gkg=gcd(N,k),tnp=\frac{N}{g},tmp=\f...原创 2018-09-26 13:46:11 · 324 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 1 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Parity【思路要点】分 bbb 的奇偶性讨论即可。时间复杂度 O(k)O(k)O(k) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long long l...原创 2019-02-14 13:55:38 · 821 阅读 · 2 评论 -
【USACO】2019 February Contest, Platinum题解
**【T1】**Cow Dating【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑如何快速计算一个区间 [l,r][l,r][l,r] 的价值。定义二元组 (x,y)(x,y)(x,y) 来描述一个区间, xxx 表示区间中恰好有一个关键点的概率, yyy 表示区间中没有关键点的概率。显然,对于两个区间 (x1,y1),(x2,y2)(x_1,y...原创 2019-02-27 10:33:59 · 1250 阅读 · 1 评论 -
【AtCoder】ExaWizards 2019 题解
【比赛链接】点击打开链接【题解链接】点击打开链接**【A】**Regular Triangle【思路要点】判断是否 A=B=CA=B=CA=B=C 。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;ty...原创 2019-03-31 11:21:18 · 676 阅读 · 0 评论 -
【LOJ3177】「IOI2019」矩形区域
【题目链接】点击打开链接【思路要点】考虑一个区域合法的条件,其每一行的元素都要小于这一行两侧的元素,其每一列的元素都要小于这一列两侧的元素。考虑一行左右两侧的元素 a,ba,ba,b ,则 bbb 是 aaa 右侧第一个 ≥a\geq a≥a 的元素或 aaa 是 bbb 左侧第一个 ≥b\geq b≥b 的元素两者中至少有一点成立,列同理。我们称一对满足其中一个元素 bbb...原创 2019-08-14 16:26:11 · 740 阅读 · 0 评论 -
【LOJ3179】「IOI2019」视觉程序
【题目链接】点击打开链接【思路要点】考虑 K=1K=1K=1 的情况,我们需要判断是否存在相邻的黑色像素。如果我们知道两个黑色像素的相对方向,则可以采取如下策略:不妨令两个黑色像素在同一列,计算每一行的 ororor ,并计算得到的数组的前缀 ororor 与后缀 ororor ,记为 prei,sufipre_i,suf_iprei,sufi 。若存在一个 iii 使得...原创 2019-08-14 10:48:45 · 1619 阅读 · 0 评论 -
【省内训练2019-06-28】Swords
【思路要点】补集转化,对于每个询问 SSS ,考虑求不能满足条件的方案数 query(S)query(S)query(S) 。记 cntS=∑i=1N[ai∪S=∅]cnt_S=\sum_{i=1}^{N}[a_i\cup S=\empty]cntS=∑i=1N[ai∪S=∅] ,即不能满足 sss 中任何一个条件的 aia_iai 的个数。则由容斥原理,有 query(S)=∑...原创 2019-06-28 19:03:51 · 473 阅读 · 0 评论 -
【LOJ2570】「ZJOI2017」线段树
【题目链接】点击打开链接【思路要点】对于区间 [l,r][l,r][l,r] ,考虑 [l−1,l−1][l-1,l-1][l−1,l−1] 对应的点 xxx 和 [r+1,r+1][r+1,r+1][r+1,r+1] 对应的点 yyy ,记 LcaLcaLca 为 x,yx,yx,y 的最近公共祖先。若 xxx 到 LcaLcaLca 链上的某个点具有不在该链上的右儿子,则该...原创 2019-06-26 09:56:12 · 404 阅读 · 0 评论 -
【校内训练2019-06-17】随机除法
【思路要点】记 N=p1k1p2k2…pnknN=p_1^{k_1}p_2^{k_2}\dots p_n^{k^n}N=p1k1p2k2…pnkn ,则答案显然只和 (k1,k2,…,kn)(k_1,k_2,\dots,k_n)(k1,k2,…,kn) 有关,并且排序后不同的数组在 N≤1024N\leq 10^{24}N≤1024 时约有 1.7×1051.7\times1...原创 2019-06-17 19:48:15 · 595 阅读 · 0 评论 -
【校内训练2019-06-26】Z
【思路要点】首先差分序列,此时序列中至多存在 2K2K2K 个 111 。剩余的过程可以看做选定一个 111 ,并将其移动在集合 {ai}\{a_i\}{ai} 中的距离。预处理每两个 111 之间的操作距离,然后状压 dpdpdp 即可。时间复杂度 O(N×L×K+K×4K)O(N\times L\times K+K\times 4^{K})O(N×L×K+K×4K) 。【代...原创 2019-06-25 12:23:51 · 210 阅读 · 0 评论 -
【LOJ3047】「ZJOI2019」浙江省选
【题目链接】点击打开链接【思路要点】对于 M=1M=1M=1 的情况,问题即为求半平面交。考虑 MMM 更大的情况,以 M=2M=2M=2 为例。首先去掉排名可以为第一的人,则要想取得第二,必须在剩下的人中获得第一,对剩下的人做一次半平面交。每个排名可以为第一的人领先半平面交上的所有人的 xxx 一定是一个非空区间,可以在形成的凸包上直接二分找到这个区间 [li,ri][l...原创 2019-06-16 12:20:27 · 631 阅读 · 0 评论 -
【省内训练2019-06-05】序列计数
【思路要点】显然有矩阵乘法优化序列自动机 dpdpdp 的做法。考虑 AlAl+1…Ar=Al−1−1…A2−1A1−1A1A2…ArA_lA_{l+1}\dots A_r=A_{l-1}^{-1}\dots A_2^{-1}A_1^{-1}A_1A_{2}\dots A_rAlAl+1…Ar=Al−1−1…A2−1A1−1A1A2…Ar ,因此只需考虑计算矩阵的前缀右乘...原创 2019-06-10 12:24:22 · 165 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 034 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Kenken Race【思路要点】首先, AAA 到 CCC 中与 BBB 到 DDD 中不能存在连续的两个障碍物。其次,若 D<CD<CD<C ,需要额外满足 BBB 到 DDD 中存在至少一个空位两侧均为空位。时间复杂度 O(N)O(N)O(N) 。【代码】#...原创 2019-06-03 09:43:54 · 710 阅读 · 0 评论 -
【AtCoder】Tenka1 Programmer Contest 2019 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】 Stones【思路要点】枚举最后的石子分布,用前缀和优化计算代价。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long lon...原创 2019-04-21 13:27:55 · 621 阅读 · 0 评论 -
【LOJ3042】「ZJOI2019」麻将
【题目链接】点击打开链接【思路要点】首先考虑如何判断一副牌是否胡牌。我们可以用动态规划来解决该问题,可以参考 【CodeForces】CodeForces Global Round 1 题解 一文中 DDD 题的解法,我们可以计算一副牌最多可以组成的面子数,再记一维状态表示是否组成过对子即可。回到原题,我们将上述 dpdpdp 的状态、数值全部压入状态,看做当前 dpdpdp...原创 2019-04-02 21:14:03 · 2065 阅读 · 2 评论 -
【CodeForces】CodeForces Round #549 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 The Beatles【思路要点】任取一个合法的起始点,枚举所有可能的步长 lll ,计算步数 N×kgcd(Nk,l)\frac{N\times k}{gcd(Nk,l)}gcd(Nk,l)N×k ,取最优值即可。时间复杂度 O(NLogV)O(NLogV)O(NLogV) 。【代码】#incl...原创 2019-04-04 20:50:38 · 953 阅读 · 0 评论 -
【CodeForces】CodeForces Round #507 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Timetable 【思路要点】 首先,若存在任何一组合法解,有 bi≥ai+t&amp;amp;amp;nbsp;(1≤i≤N)bi≥ai+t&amp;amp;amp;nbsp;(1≤i≤N)b_i≥a_i+t\ (1≤i≤N) 。 对于每一个 xixix_i ,应当满足 xi≥i,&原创 2018-09-10 20:47:42 · 456 阅读 · 0 评论 -
【CodeForces】Manthan, Codefest 18 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Packets 【思路要点】 可以用 1,2,4,...,2i,N−2i+1+11,2,4,...,2i,N−2i+1+11,2,4,...,2^i,N-2^{i+1}+1 构造一组最优的可行方案。 其中 iii 为使得 N−2i+1+1&amp;gt;0N−2i+1...原创 2018-09-05 11:34:15 · 309 阅读 · 0 评论 -
【BZOJ3269】序列染色
【题目链接】点击打开链接【思路要点】将一个合法的方案分为三个阶段:0、尚未出现一段连续的\(K\)个B。1、出现过一段连续的\(K\)个B后,尚未出现一段连续的\(K\)个W。2、已经是一个合法序列。令\(dp_{i,j}\)表示从字符串开头到第\(i\)号位置,达到阶段\(j\)的字符串数。转移方程有些复杂,建议读者结合下文的\(O(N^2)\)DP理解。在这个DP的基础上,用前缀和优化即可,时...原创 2018-04-09 12:26:19 · 314 阅读 · 0 评论 -
【BZOJ5103】【POI2018】Ró?norodno
【题目链接】点击打开链接【思路要点】分开考虑每个颜色,每一个点对一个\(K*K\)的正方形有贡献,但同一种颜色的贡献至多为1。从上到下扫描矩阵,我们需要维护一些正方形的进入和删除。由于正方形边长固定,每次贡献实际产生变化的是一个区间。用线段树支持前驱后继的查找即可确定产生变化的区间。每处理完一行,用差分+前缀和统计本行的答案。时间复杂度\(O(N*M*LogM)\),BZOJ老年机太慢了,卡不过去...原创 2018-03-19 20:21:55 · 465 阅读 · 0 评论 -
【CodeForces】CodeForces Round #468 (Div. 1 + Div. 2) 题解
【比赛链接】Div.1Div.2【题解链接】点击打开链接【Div.2 A】Friends Meeting【思路要点】模拟两个角色向中间移动即可。时间复杂度\(O(B-A)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> void...原创 2018-03-06 15:41:31 · 335 阅读 · 0 评论 -
【BZOJ5101】【POI2018】Powód
【题目链接】点击打开链接【思路要点】从低到高加入每一块挡板,没有加入的挡板视为高度为\(H\)。初始时,每一个单位正方形自成一个联通块,方案数为1,水位高度为0。加入一块挡板前,将每个联通块的方案数加上挡板高度减去当前水位。加入一块挡板相当于合并两个联通块,方案数为两个联通块方案数的乘积。于是,我们需要维护一个数据结构支持合并和全局加法,用并查集和一个全局加法TAG维护即可。时间复杂度\(O(N*...原创 2018-03-19 13:59:39 · 231 阅读 · 0 评论 -
【BZOJ2301】【HAOI2011】Problem b
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 100005int tot, prime[MAXN], f[MAXN], miu[MAXN], sum[MAXN];void init() { for (int i = 2; i < MAXN; i...原创 2018-03-12 19:31:16 · 154 阅读 · 0 评论 -
【BZOJ4868】【SHOI2017】期末考试
【题目链接】点击打开链接【思路要点】枚举工作结束的时间,根据A和B的大小关系计算该时间的最小代价。时间复杂度\(O(NLogN+MLogM+Ti)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> void chkmax(T &a...原创 2018-03-22 13:35:55 · 295 阅读 · 0 评论 -
【BZOJ3244】【UOJ122】【NOI2013】树的计数
【题目链接】BZOJUOJ【思路要点】显然,顶点的编号是无关紧要的,不妨令BFS序为\(1,2...N\)。我们在BFS序上分层,即每次我们考虑下一层会包含哪些连续的点。令此时的DFS序为\(dfs_i\),\(i\)在DFS序中的位置为\(pos_i\),当前层包含\([L,R]\)且下一层包含\([R+1,X]\)。层与层之间合法的划分应该满足\(pos_{R+1}>pos_{L}\)且...原创 2018-03-04 16:21:00 · 287 阅读 · 0 评论 -
【BZOJ3241】【UOJ125】【NOI2013】书法家
【题目链接】BZOJUOJ【思路要点】把字符画从左到右分成若干个阶段,记录上一列的内容,按列DP即可。多数转移都比较显然,在N中部处的转移需要用到一定的前缀最大值的技巧。时间复杂度\(O(N^2M)\),常数较大。【代码】#include <bits/stdc++.h>using namespace std;const int MAXN = 155;const int MAXM ...原创 2018-03-10 11:22:07 · 247 阅读 · 0 评论 -
【BZOJ4724】【POI2017】Podzielno
【题目链接】点击打开链接【思路要点】首先,\(B\equiv1(Mod\ B - 1)\)。因此,\(\sum A_i*B^i\equiv\sum A_i(Mod\ B - 1)\)。即,问题等价于选出一组数,使得它们总和是\(B-1\)的倍数,同时使得它们能组成尽可能大的数。求出所有数的总和,如果是\(B-1\)的倍数,那么按顺序排列所有数即可,否则,删去一个数使得总和成为\(B-1\)的倍数,...原创 2018-03-16 11:04:55 · 236 阅读 · 0 评论 -
【BZOJ3307】雨天的尾巴
【题目链接】点击打开链接【思路要点】路径\((x,y)\)可以看做路径\((x,root)\)+路径\((y,root)\)-路径\((Lca,root)\)-路径\((father_{Lca},y)\)。依据这一点进行树上差分和线段树合并即可。时间复杂度\(O(NLogN)\)(\(N\)、\(M\)同阶)。【代码】#include<bits/stdc++.h>using name...原创 2018-03-15 19:38:48 · 482 阅读 · 0 评论