自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 POJ 2084 大数 + DP

题意传送门 POJ 2084题解若满足各点对连线且不交叉,那么对于某条连线,其上方与下方的点数为偶数,那么枚举某点的连线即得到递推公式。设 dp[i]dp[i]dp[i] 代表点对数为 iii 的连线总数,则有dp[i]=∑j=0i−1dp[j]×dp[i−1−j]dp[i]=\sum\limits_{j=0}^{i-1}dp[j]\times dp[i-1-j]dp[i]=j=0∑i−1​dp[j]×dp[i−1−j]#include <algorithm>#include &l

2020-10-30 22:31:52 123

原创 LeeCode 1632 拓扑序 + 并查集

题意传送门 LeeCode 1632. 矩阵转换后的秩题解考虑同行同列的数字较小值向较大值连边,得到一个 DAGDAGDAG,则问题转化为求解拓扑序。对于同行或列相同值元素,它们秩相同,若相互连边,图中会出现环,那么将其看做一个点;用并查集维护一个同行或列相同值元素构成的连通分量,用根节点代表原图各点进行连边。class Solution{#define maxn 500 typedef pair<int, int> P;public: int n, m, deg

2020-10-30 19:49:27 93

原创 NC 15665 BFS + 优先队列

题意传送门 NC 15665题解BFS考虑到使用传送阵与向相邻格子移动花费的时间不同,用 两个队列 分别维护使用传送阵与向相邻格子移动的情况,每次按照广度递增出队,更新最短时间。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <queue>#include <vector>using namespace

2020-10-30 16:33:17 83

原创 Educational Codeforces Round 96 (Rated for Div. 2)

传送门Educational Codeforces Round 96 (Rated for Div. 2)A多重部分和问题,dp[i][j]dp[i][j]dp[i][j] 代表使用 0−i0-i0−i 种数字是否能组合为 jjjdp[i][j]=dp[i−1][j] ∣ dp[i][j−N[i]]dp[i][j] = dp[i-1][j]\ |\ dp[i][j-N[i]]dp[i][j]=dp[i−1][j] ∣ dp[i][j−N[i]] 动态规划的同时

2020-10-30 09:51:06 148

原创 LeeCode 1631 Dijkstra

题意传送门 LeeCode 1631. 最小体力消耗路径题解路径权值为 max{∣hi−hj∣},e(i,j)∈Emax\{|h_i-h_j|\},e(i,j)\in Emax{∣hi​−hj​∣},e(i,j)∈E,是非严格递增的,那么可以使用 DijkstraDijkstraDijkstra 求解单源最短路。struct edge{ int to, cost;};class Solution{#define maxn 10005 typedef pair<int,

2020-10-30 09:47:59 117

原创 P2617 BIT + 主席树 / 整体二分

题意传送门 P2617 Dynamic Rankings题解求动态区间第 kkk 小,带修改的主席树裸题。考虑主席树修改某一个历史版本(即某一个前缀的权值线段树),那么也需要修改其后的历史版本,单次修改复杂度 O(nlogn)O(nlogn)O(nlogn)。BITBITBIT 单次修改前缀复杂度 O(logn)O(logn)O(logn),那么可以 BITBITBIT 套主席树。基本思想是 BITBITBIT 维护的区间为历史版本 [1,n][1,n][1,n],那么可以高效的进行单点修改;BIT

2020-10-26 23:37:43 134

原创 Codeforces Round #679 (Div. 2)

传送门Codeforces Round #679 (Div. 2)Annn 为偶数,那么考虑相邻数对组合为零,则有 ai×bi+ai+1×bi+1=0a_i\times b_i+a_{i+1}\times b_{i+1}=0ai​×bi​+ai+1​×bi+1​=0;取 bi=ai+1,bi+1=−aib_i=a_{i+1},b_{i+1}=-a_ibi​=ai+1​,bi+1​=−ai​ 即可。#include <algorithm>#include <cmath>#i

2020-10-25 22:42:22 381

原创 P3066 [USACO12DEC] DFS + 主席树

题意传送门 P3066 [USACO12DEC]Running Away From the Barn题解考虑从根 DFSDFSDFS 将树表示为序列进行维护。设节点 iii 到根节点的距离为 d[i]d[i]d[i],对于每个节点 uuu 只考虑以其为根的子树上的节点,对于满足条件的点对 (u,v)(u,v)(u,v),其 LCALCALCA 为 uuu,那么 d[v]=d[u]+dist(u,v)d[v]=d[u]+dist(u,v)d[v]=d[u]+dist(u,v)。对于一颗子树,其节点的 D

2020-10-25 16:12:01 131

原创 P3567 [POI2014] 主席树

题意传送门 P3567 [POI2014]KUR-Couriers题解主席树查询出现个数严格大于查询区间一半的数字即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxn 500005#define tree_size 10000005int N, M, A[maxn];int cn

2020-10-24 22:33:22 71

原创 P3834 主席树

题意传送门 P3834题解主席树裸题,考虑到未更新的节点代表区间和为 000,可以省去建树这一步,用初始根节点的值映射未更新节点的值。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxn 200005#define tree_size 4000005int N, M, cnt, A[ma

2020-10-24 21:56:20 117

原创 LeeCode 1024 DP / 贪心

题意传送门 LeeCode 1024. 视频拼接题解DP对区间按左界排序,以保证处理每一个区间时左界比其左界小的区间已经被处理。dp[i+1][j]dp[i+1][j]dp[i+1][j] 代表使用索引为 [0,i][0,i][0,i] 的使视频覆盖区间 [0,j][0,j][0,j] 的最小数量,假设视频 iii 覆盖区间为 [lb[i],ub[i]][lb[i], ub[i]][lb[i],ub[i]],则有dp[i+1][j]=min{dp[i][lb[i]]+1]}dp[i+1][j]=

2020-10-24 20:41:45 248 1

原创 Codeforces Raif Round 1 (Div. 1 + Div. 2)

传送门Codeforces Raif Round 1 (Div. 1 + Div. 2)A考虑单一方向,则需要时间 ∣x2−x1∣+∣y2−y1∣|x_2-x_1|+|y_2-y_1|∣x2​−x1​∣+∣y2​−y1​∣;若两个方向距离都大于 000,则需要额外 222 单位的时间改变方向。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using

2020-10-22 22:42:19 159

原创 LeeCode 1625 暴力

题意传送门 LeeCode 1625. 执行操作后字典序最小的字符串题解考虑累加,奇数下标元素同时增加 aaa 的整数倍,而处理结果最多只有 101010 种不同的情况,因为对个位数产生影响的只有 aaa 的 0−90-90−9 倍。考虑轮转,设字符串长度为 nnn,则元素下标变为 i+x×b=j(mod n),x∈Zi+x\times b = j(mod\ n),x\in Zi+x×b=j(mod n),x∈Z,则 jjj 的可能值为 i+x×b+y×n,x∈Z,y∈Zi+x\

2020-10-22 16:37:16 66

原创 LeeCode 1626 DP

题意传送门 LeeCode 1626. 无矛盾的最佳球队题解考虑点权的 LCSLCSLCS 问题,考虑到年龄相同的队员组合不会产生矛盾,则将队员优先按 agesagesages 排序,再对 scoresscoresscores 排序。dp[i]dp[i]dp[i] 代表以 s[i]s[i]s[i] 结尾的子序列最大权和dp[i]=max{dp[i],dp[j]+scores[i]}scores[j]<=scores[i]dp[i]=max\{dp[i], dp[j]+scores[i]\}_{

2020-10-19 23:40:15 52

原创 LeeCode 1627 并查集 + 埃氏筛法

题意传送门 LeeCode 1627. 带阈值的图连通性题解图的连通性使用并查集维护,对于节点直接连通性的判断,枚举点对求 gcdgcdgcd 复杂度 O(n2logn)O(n^2logn)O(n2logn)。考虑筛法,枚举大于 thresholdthresholdthreshold 的因数,最坏复杂度 O(nlogn)O(nlogn)O(nlogn);考虑伪质数,那么可被伪质数整除的因数筛的数字连通性都已经处理,那么可以使用埃氏筛法,最坏复杂度 O(nlogn)O(nlogn)O(nlogn)。c

2020-10-19 23:24:38 335

原创 P4584 [FJOI2015] 序列自动机 + AC 自动机 + SPFA

题意传送门 P4584 [FJOI2015]带子串包含约束LCS问题题解分别对 X,YX,YX,Y 建序列自动机,那么可以从根节点搜索以遍历所有的公共子序列。对约束集子串建 ACACAC 自动机,搜索的同时更新子序列后缀状态。对约束集子串进行状态压缩,在 ACACAC 自动机 BFSBFSBFS 计算失配指针时,将各个节点对应的后缀状态记录所有的等于约束子集的后缀。最后 SPFASPFASPFA 求解最长子序列。#include <algorithm>#include <cmat

2020-10-19 11:49:30 154

原创 P2572 [SCOI2010] 线段树

题意传送门 P2572 [SCOI2010]序列操作题解操作 0,10,10,1 即简单的区间覆盖,操作 222 取反操作可以简单地交换区间内 0,10,10,1 的信息实现。需要维护的信息有区间 0,10,10,1 的总数、最大的连续长度、左连续的最大长度与右连续的最大长度。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespac

2020-10-18 23:33:50 180

原创 Codeforces 1295C 序列自动机 + 贪心

题意传送门 Codeforces 1295C Obtain The String题解建立 SSS 的序列自动机,每一次贪心的选择 SSS 中可匹配 TTT 剩余字符的最长子序列。若最优解出现某次选择中未取 SSS 满足条件的最长子序列,那么此次取最长子序列答案不会增大。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace st

2020-10-18 22:38:26 143

原创 P4608 [FJOI2016] 序列自动机

题意传送门 P4608 [FJOI2016]所有公共子序列问题题解序列自动机,原理即记录序列各个位置对应的每一个字符集元素的下一个出现的位置,则从根节点 DFSDFSDFS 即可遍历所有子序列。对于公共子序列问题,将序列 X,YX, YX,Y 处理为序列自动机,从根节点沿相同路径 DFSDFSDFS,则遍历的所有路径对应了所有的公共子序列。#include <algorithm>#include <cmath>#include <cstdio>#includ

2020-10-18 21:28:04 170

原创 NC 15557 线段树 + 尺取法

题意传送门 NC 15557题解如果只考虑区间的 gcdgcdgcd,根据其性质gcd(a,b,c,… )=gcd(a,gcd(b,c,… )gcd(a,b,c,\dots)=gcd(a,gcd(b,c,\dots)gcd(a,b,c,…)=gcd(a,gcd(b,c,…) 线段树维护区间 gcdgcdgcd 即可。而合并满足子区间的 gcdgcdgcd 等于区间 gcdgcdgcd 的子区间数需要维护更多信息。考虑区间拓展其 gcdgcdgcd 的不减性质gcd(a,b)≥gcd(a,b,c)

2020-10-16 10:44:50 166

原创 NC 22593 线段树

题意传送门 NC 22593题解考虑用线段树维护覆盖的单位区间数,对于区间修改,若使用 lazy taglazy\ taglazy tag 将单次修改复杂度限制为 O(logn)O(logn)O(logn),查询时对于 lazy taglazy\ taglazy tag 为正的区间直接返回区间长度;反之继续查询子区间。此处保证删除的区间一定仅加入过一次,那么 lazy taglazy\ taglazy tag 最后压入的位置是一致的,那么可

2020-10-15 16:08:37 61

原创 LeeCode 1617 状压 + DFS

题意传送门 LeeCode 1617. 统计子树中城市之间最大距离题解考虑到节点数较少,进行状态压缩然后 O(2n)O(2^n)O(2n) 枚举子集。问题在于如何判断子集对应的节点恰好构成一颗子树,可以 DFSDFSDFS 求解,每次只向在同一个子集中的节点搜索,将状态对应二进制位赋 000,那么假如子集恰好对应一颗子树,则 DFSDFSDFS 结束时状态为 000。子树的最大路径可以在 DFSDFSDFS 的同时求解,对于每一个节点,最大路径的可能值为与根节点的路径或子树中最大的两条路径和。cla

2020-10-12 15:58:48 121

原创 P1169 [ZJOI2007] 悬线法 DP

题意传送门 P1169 [ZJOI2007]棋盘制作题解求棋盘内满足黑白相间的条件的最大矩形,考虑悬线法。先按行维护各点在满足条件下可向左右拓展的最长长度,接着在维护各点向上可拓展的最长长度,同时更新各点与悬线间沿左右方向可拓展的最长长度。最后枚举各点更新答案即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;

2020-10-10 23:08:39 50

原创 P3117 [USACO15JAN] 尺取法

题意传送门 P3117 [USACO15JAN]Cow Rectangles题解暴力枚举矩形端点 O(N4)O(N^4)O(N4)。枚举矩形上下界,考虑区间 [l,r)[l,r)[l,r),假设区间代表的矩形内奶牛数为 nnn 且对于右界 rrr 而言是最大值,那么对于满足区间奶牛数不小于 nnn 的 [l′,r+1)[l',r+1)[l′,r+1) 的左界满足 l′≥ll'\geq ll′≥l,可以使用尺取法将复杂度降为 O(n3)O(n^3)O(n3)。#include <algorith

2020-10-10 20:52:02 128

原创 P3118 [USACO15JAN] 状压 DP + BFS

题意传送门 P3118 [USACO15JAN]Moovie Mooving题解爆搜至少 O(N!)O(N!)O(N!),考虑状态压缩 DPDPDP。dp[i]dp[i]dp[i] 代表集合 iii 中电影全部的排列能达到的最大 ttt,使 [0,t][0,t][0,t] 都被电影覆盖。dp[i∣1<<j]=max0≤j<N{dp[i∣1<<j],upper_bound(dp[i])+D[j]}dp[i|1<<j]=max_{0\leq j<N}\{d

2020-10-10 14:22:13 130

原创 P3114 [USACO15JAN] 坐标离散化 + 扫描线 + Set

题意传送门 P3114 [USACO15JAN]Stampede题解每头牛抵达 x=0x=0x=0 的时间段为 [(−x)×r,(−x−1)×r)[(-x)\times r,(-x-1)\times r)[(−x)×r,(−x−1)×r),且每头牛初始横坐标为整数,那么对于 t∈Zt\in Zt∈Z 在时间段 [t,t+1)[t,t+1)[t,t+1) 看到的都是同一头牛,考虑整数的时间点即可。那么按照各头牛抵达 x=0x=0x=0 的时间进行扫描,标记牛穿过 x=0x=0x=0 的左右端点;用一个集

2020-10-08 23:57:08 99

原创 LeeCode 1575 DP

题意传送门 LeeCode 1575. 统计所有可行路径题解dp[i][j]dp[i][j]dp[i][j] 代表从 startstartstart 出发,到达城市 iii 且剩余汽油总量为 jjj 的方案数,则有递推dp[i][j]=∑i!=i′且abs(location[i]−location[i′])+j≤fueldp[i′][j+abs(location[i]−location[i′])]dp[i][j]=\sum\limits_{i!=i'且abs(location[i]-location

2020-10-08 22:26:37 42

原创 LeeCode 1574 二分

题意传送门 LeeCode 1574. 删除最短的子数组使剩余数组有序题解考虑删除子数组的连续性,若存在满足条件的子数组,假设其索引为 [l,r)[l,r)[l,r),那么有原数组 [0,l)[0,l)[0,l) 以及 [r,n)[r,n)[r,n) 满足单调非递减性质,且有 arr[l−1]≤arr[r]arr[l-1]\leq arr[r]arr[l−1]≤arr[r]。预处理记录 arrarrarr 左右两端连续区间的单调非递减性质,二分答案,复杂度 O(nlogn)O(nlogn)O(nlog

2020-10-08 22:16:59 52

原创 NC 54586 线段树

题意传送门 NC 54586 小翔和泰拉瑞亚题解考虑 i,ji,ji,j 为答案对应的索引,设 Hi>HjH_i>H_jHi​>Hj​,则实施的魔法分 333 种情况:i,j∈[Li,Ri]i,j\in [L_i,R_i]i,j∈[Li​,Ri​];i∉[Li,Ri],j∈[Li,Ri]i\notin [L_i,R_i],j \in [L_i,R_i]i∈/​[Li​,Ri​],j∈[Li​,Ri​];i∈[Li,Ri],j∉[Li,Ri]i\in [L_i,R_i],j \noti

2020-10-06 22:14:38 99

原创 LeeCode 834 DFS

题意传送门 LeeCode 834. 树中距离之和题解枚举根节点 DFSDFSDFS 复杂度 O(n2)O(n^2)O(n2),实际上一次 DFSDFSDFS 已经获取了以各节点为根的子树的信息,利用这些信息进行优化。设 sum[i],num[i]sum[i], num[i]sum[i],num[i] 分别为节点 iii 为根的子树的树中距离和与树中节点个数,则有{sum[i]=∑(sum[ch]+num[ch])\begin{cases}sum[i]=\sum(sum[ch]+num[ch])\

2020-10-06 15:04:35 56

原创 NC 54585 DP + BIT

题意传送门 NC 54585题解dp[i][j]dp[i][j]dp[i][j] 代表以 a[i]a[i]a[i] 结尾长度为 jjj 的子序列,则有递推式dp[i][j]=∑i′<i且a[i′]<a[i]dp[i′][j−1]dp[i][j] = \sum\limits_{i'<i 且 a[i']<a[i]}dp[i'][j-1]dp[i][j]=i′<i且a[i′]<a[i]∑​dp[i′][j−1] 用 BIT[k]BIT[k]BIT[k] 维护以 a[i]

2020-10-05 21:30:55 238

原创 NC 53370 BIT

题意传送门 NC 53370题解以半径的顶函数为索引,用 BITBITBIT 维护球体内的能量点数。#include <bits/stdc++.h>using namespace std;#define maxn 200000int n, bit[maxn + 1];void add(int i, int x){ while (i <= maxn) { bit[i] += x; i += i & -i; }

2020-10-05 20:17:11 102

原创 NC 26255 更相减损术 + 线段树

题意传送门 NC 26255题解只考虑后两种操作很容易用线段树维护,但第一种操作需要进行区间修改,复杂度可能退化为 O(n)O(n)O(n)。考虑差分处理。差分的好处在于将区间更新变为单点更新,求单点原值的时候 O(logn)O(logn)O(logn) 求前缀和即可。问题在于如何维护区间的最大公约数。根据更相减损术(类似于减法版的辗转相除法),最大公约数有如下性质 gcd(x,y,z… )=gcd(x,y−x,z−y,… )gcd(x,y,z\dots)=gcd(x,y-x,z-y,\dots)g

2020-10-05 20:00:02 141

原创 NC 26253 坐标离散化 + 线段树 / BIT

题意传送门 NC 26253题解每一轮遍历一次进行标记 O(n2)O(n^2)O(n2),需要优化标记每一个妹子的算法。处理 (ai,bi)(a_i,b_i)(ai​,bi​) 这样的二元组间大小关系,考虑先使其中一维有序。假设将妹子按降序排序,从前向后遍历,此时保证遍历到当前妹子 iii 获取的信息都是满足 aj>aia_j>a_iaj​>ai​ 的妹子的信息,此时仅考虑 bib_ibi​ 与 bjb_jbj​ 间的关系即可:若不存在 jjj 使得 bj>bib_j>b

2020-10-05 14:57:46 88

原创 NC 14522 坐标离散化 + BIT

题意传送门 NC 14522题解对于一个逆序对 (ai,aj)(a_i,a_j)(ai​,aj​),共有 i×(n−j+1)i\times (n-j+1)i×(n−j+1) 个子区间包含这个逆序对。参照 BITBITBIT 求数组逆序对的思路,将每个点的权值赋为包含它的子区间左边界的数量,最后再乘以包含它的子区间右界的数量。考虑到数据范围较大,进行坐标离散化。#include <bits/stdc++.h>using namespace std;#define maxn 100000

2020-10-04 23:04:41 56

原创 LeeCode 1605 解空间 / 贪心

题意传送门 LeeCode 5518. 给定行和列的和求可行矩阵题解首先考虑构造任意矩阵的问题,将方程写作 Ax=bAx=bAx=b,则系数矩阵 AAA 为 (r+c)×rc(r+c)\times rc(r+c)×rc 矩阵,经过初等行变换可以证明解空间基的维数为 dimK(A)=n−r(A)=rc−(r+c−1)dimK(A)=n-r(A)=rc-(r+c-1)dimK(A)=n−r(A)=rc−(r+c−1) 那么选择 dimK(A)dimK(A)dimK(A) 个自由变量任意赋值即可。此处多了

2020-10-04 21:24:20 105

原创 LeeCode 1611 DFS

题意传送门 LeeCode 5533. 使整数变为 0 的最少操作次数题解先考虑基本变换,定义 F(i)F(i)F(i) 为使 000 变为 2i2^i2i 或使 2i2^i2i 变为 000 的操作次数,那么需要 F(i−1)F(i-1)F(i−1) 次操作使将 000 变为 2i−12^{i-1}2i−1,将 iii 位异或 111 后,在通过 F(i−1)F(i-1)F(i−1) 次操作使 2i−12^{i-1}2i−1 变为 000。则有{F(i)=2F(i−1)+1F(0)=1\begin

2020-10-04 20:22:27 111

原创 LeeCode 1610 尺取法

题意传送门 LeeCode 1610. 可见点的最大数目题解区间 [d−angle/2,d+angle/2][d - angle/2, d + angle/2][d−angle/2,d+angle/2] 左界代表的角度逆时针移动后,满足区间代表的角度差小于等于 angleangleangle,那么可以使用尺取法求解大小为 angleangleangle 的区间内的最大点数。考虑到 xxx 正半轴左右侧极限相差 2π2\pi2π,那么可以拆环成链,即,将观察者与点的相对于坐标轴的夹角加上 2π2\pi

2020-10-04 17:24:23 62

原创 LeeCode 1606 优先队列 + Set

题意传送门 LeeCode 5517. 找到处理最多请求的服务器题解模拟请求的过程,暴力 O(n2)O(n^2)O(n2),需要优化每个请求选择服务器的算法。设服务器 jjj 执行上一个任务需要执行到 last[j]last[j]last[j],那么第 iii 次请求需要求解满足 last[j]≤arrival[i]last[j]\leq arrival[i]last[j]≤arrival[i] 的所有服务器的最小索引,优先考虑区间 [i%k,k)[i\%k,k)[i%k,k),再考虑 [0,i%k)

2020-10-04 16:09:51 122

原创 NC 200195 线段树

题意NC 200195题解线段树维护区间和,考虑到等差数列差值为常数 111,lazy taglazy\ taglazy tag 记录区间左端点的数值即可。#include <bits/stdc++.h>using namespace std;#define maxn 200005#define sg_size (1 << 19) - 1typedef long long ll;int a[maxn];ll sum[sg_size], lz[s

2020-10-03 22:04:20 57

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除