自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 3274 前缀和 + Hash

题意传送门 POJ 3274题解前缀和维护 [0,i][0,i][0,i] 区间 kkk 种特征的数量和。满足条件的区间 [i,j][i,j][i,j],对于任一对不同的特征 k1,k2k1,k2k1,k2,都有 cnt[i][k1]−cnt[j][k1]=cnt[i][k2]−cnt[j][k2]cnt[i][k1]-cnt[j][k1]=cnt[i][k2]-cnt[j][k2]cnt[i][k1]−cnt[j][k1]=cnt[i][k2]−cnt[j][k2];移项得到 cnt[i][k1]−

2020-08-25 20:54:21 145

原创 POJ 2752 KMP

题意传送门 POJ 2752题解kmpkmpkmp 中需要维护某一连续子串的最长且相等的前缀与后缀,一般称之为数组 nxtnxtnxt;匹配时 j=nxt[j]j=nxt[j]j=nxt[j] 这一步基于一个定理:定义字符串相等的前缀与后缀为 borderborderborder,r,sr,sr,s 为字符串的 borderborderborder,若 ∣r∣<∣s∣|r|<|s|∣r∣<∣s∣,则 rrr 为 sss 的 borderborderborder。(证明见此处)基于

2020-08-24 20:09:30 113

原创 POJ 3461 KMP

题意传送门 POJ 3461题解kmpkmpkmp 单串匹配,统计匹配次数即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxm 10005#define maxn 1000005char W[maxm], T[maxn];int b[maxm];int kmp(const c

2020-08-24 19:34:33 69

原创 LeeCode 679 枚举 + 栈

题意传送门 LeeCode 679. 24 点游戏题解枚举牌的排列,共 4!4!4! 种可能;枚举计算使用的 333 个操作符,共 434^343 种可能;枚举计算的顺序,共 3!3!3! 种可能。实现上使用优先级处理表达式计算的顺序,用栈计算表达式即可;当然,递归的实现更为简便。class Solution{#define eps 1e-10public: void op1(stack<double> &ns, stack<int> &os,

2020-08-22 23:09:01 159

原创 POJ 2406 KMP

题意传送门 POJ 2406题解KMPKMPKMP 算法中 b[i]b[i]b[i] 代表字符串区间 [0,i−1][0,i-1][0,i−1] 的最长且相等的前缀与后缀长度。设字符串长度为 lenlenlen,那么循环节的长度为 len−b[len]len-b[len]len−b[len];若不满足 len%(len−b[len])==0len\%(len-b[len])==0len%(len−b[len])==0 则 n=1n=1n=1。#include <algorithm>#i

2020-08-17 20:42:28 120

原创 POJ 2524 并查集

题意传送门 POJ 2524题解并查集维护学生的关系,统计连通分量。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <vector>using namespace std;#define maxn 50005int n, m, res, par[maxn], rnk[maxn];void init(int n)

2020-08-15 20:26:27 212

原创 LeeCode 1546 贪心 + 前缀和 + 哈希

题意传送门 LeeCode 1546. 和为目标值的最大数目不重叠非空子数组数目题解每次贪心地选取元素和为 targettargettarget 且右边界最靠近左侧的区间,哈希表维护前缀和,那么对于每一个右边界,就可以常数时间复杂度判断是否存在满足条件的区间。class Solution{public: int maxNonOverlapping(vector<int> &nums, int target) { unordered_set&lt

2020-08-15 20:10:30 166

原创 LeeCode 1547 区间 DP

题意传送门 LeeCode 1547. 切棍子的最小成本题解dp[i][j]dp[i][j]dp[i][j] 代表切割位置 iii 与切割位置 jjj 间切木棍的最小成本,则有递推式dp[i][j]=mini<k<j{dp[i][k]+dp[k][j]+cuts[j]−cuts[i]}dp[i][j]=min_{i<k<j}\{dp[i][k]+dp[k][j]+cuts[j]-cuts[i]\}dp[i][j]=mini<k<j​{dp[i][k]+dp[k][

2020-08-15 19:22:17 76

原创 POJ 3080 枚举 + KMP

题意传送门 POJ 3080题解长度从大至小枚举子串,使用 KMPKMPKMP 算法匹配各序列即可。答案为最长子串,若存在相同长度子串,输出字典序最小的。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxm 12#define maxs 65int n, m, b[maxs];char

2020-08-14 21:36:32 134

原创 LeeCode 130 DFS

题意传送门 LeeCode 130. 被围绕的区域题解从矩形区域边界 dfsdfsdfs,标记所有可保留的 ′O′'O'′O′;然后遍历区域元素,将标记的 ′O′'O'′O′ 保留,其余赋为 ′X′'X'′X′。class Solution{public: int n, m, dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; void dfs(int x, int y, vector<vector<char>> &

2020-08-11 10:41:24 81

原创 LeeCode 93 DFS

题意传送门 LeeCode 93. 复原IP地址题解搜索 IPIPIP 地址的 333 个 ′.′'.'′.′ 位置,判断合法性即可。class Solution{public: int n; vector<string> res; bool judge(string &s, int l, int r) { if (l < r && s[l] == '0') { re

2020-08-09 16:28:10 105

原创 LeeCode 207 拓扑排序

题意传送门 LeeCode题解求图是否存在拓扑排序。栈维护入度为 000 的节点,每次将入度为 000 的节点移除后,将其连边对应的节点入度减一。若最终移除的节点个数正好等于 numCoursesnumCoursesnumCourses 则可能完成所有学习;反之,则不可能。class Solution{#define maxn 100005public: int deg[maxn]; vector<int> G[maxn]; bool canFinish(i

2020-08-04 16:55:30 91

原创 POJ 1458 DP

题意传送门 POJ 1458题解最长公共子序列问题(LCS),dp[i][j]dp[i][j]dp[i][j] 代表 s1…sis_1\dots s_is1​…si​ 和 t1…tit_1\dots t_it1​…ti​ 对应的 LCSLCSLCS 长度dp[i+1][j+1]={dp[i][j]+1s[i+1]=t[j+1]max(dp[i][j+1],dp[i+1][j])otherwisedp[i+1][j+1]=\begin{cases}dp[i][j]+1 & s[i+1]=t[

2020-08-03 21:10:36 62

原创 POJ 2823 线段树 / 单调队列

题意传送门 POJ 2823题解线段树线段树维护区间的最大值与最小值,复杂度 O(nlogn)O(nlogn)O(nlogn)。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define inf 0x3f3f3f3f#define maxn 1000005#define st_size (1 <

2020-08-02 18:32:24 170

原创 LeeCode 5478 DP

题意传送门 LeeCode 5478. 最大得分题解dp[i][j]dp[i][j]dp[i][j] 代表终点为第 iii 个数组的 jjj 个位置可获得的最大分数,设相同数字在另一个数组对应的索引为 idxidxidxdp[i][j]={dp[i][j−1]+nums[i][j]dp[i⊕1][idx−1]+nums[i⊕1][idx]dp[i][j]=\begin{cases}dp[i][j-1]+nums[i][j] \\dp[i\oplus1][idx-1]+nums[i\oplus1]

2020-08-02 16:30:00 98

原创 LeeCode 5477 贪心

题意传送门 LeeCode 5477. 排布二进制网格的最少交换次数题解观察到满足第 iii 行的 010101 形式也一定满足第 j(j>i)j(j>i)j(j>i) 行。从第 111 行开始考虑,贪心地选取可以放置到第一行(即具有 00…000\dots 000…0 或是 10…010\dots 010…0 的形式)且离第 111 行最近的行,进行交换操作;不断考虑后续的行,直至满足三角矩阵的形式。class Solution{public: int minSwap

2020-08-02 16:19:29 99

原创 LeeCode 5476 模拟

题意传送门 LeeCode 5476. 找出数组游戏的赢家题解设数组元素个数为 nnn,若 k≥n−1k\geq n-1k≥n−1 则答案必然大于其余 n−1n-1n−1 个元素,返回最大值即可。模拟数组游戏的过程,对于数组中某个元素,若其大于左侧元素的最大值,则必然至少赢 111 次,且其相邻右侧的小于它的连续元素个数即其在位置 000 的获胜次数;不断模拟,若出现右侧相邻元素都小于位置 000 的元素,此时移动至队尾的元素都比它小,则获胜元素为数组最大值。class Solution{pub

2020-08-02 15:48:54 65

原创 POJ 2217 Hash + 二分

题意传送门 POJ 2217题解字符串哈希使用基于 unsigned long longunsigned\ long\ longunsigned long long 的自然溢出法。考虑到若存在长度为 lenlenlen 的相同子串,则答案一定大于等于 lenlenlen,那么二分相同子串的最大长度。检验函数即判断是否存在长度为 lenlenlen 的相同子串,那么枚举 s1s1s1 长度为 lenlenlen 的所有子串,使之有序后,枚举 s2s2s2 长度为

2020-08-01 22:52:20 75

原创 LeeCode 632 尺取法

题意传送门 LeeCode 632. 最小区间题解求覆盖 kkk 个列表至少一个元素的最小区间,那么对于满足条件的区间 [l,r][l,r][l,r],右界右移后的区间 [l,r+1][l,r+1][l,r+1] 也一定满足条件。最小区间的左右界一定是 kkk 个列表中的元素,遍历元素记录对应列表索引,使其有序后,尺取法求解即可。class Solution{ typedef pair<int, int> P;public: vector<int> sma

2020-08-01 11:21:17 64

空空如也

空空如也

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

TA关注的人

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