![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法专题训练及常用技巧
文章平均质量分 89
code_mryxj
这个作者很懒,什么都没留下…
展开
-
Leetcode 76:最小覆盖子串 (滑动窗口)
76. 最小覆盖子串题意:问一个思路 :代码:class Solution: def minWindow(self, s: str, t: str) -> str: i,j , ans = 0, 0 , '' import collections cnt = collections.Counter(t) n =...原创 2020-02-14 11:26:41 · 229 阅读 · 0 评论 -
常见技巧精选.尺取法(滑动窗口) poj3061 3320 2566 2739 2100
算法概览:这个技巧常用在求连续序列里的一些信息,具体做法通常是指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点得出答案。比如poj3061求出总和不小于S的连续子序列的长度的最小值。 然后这个算法就像一本尺子一样保持一个宽度,从左往右扫一遍这个序列。题目:Subsequence poj3061#include<cstdio>#include<algorithm>using n原创 2017-03-06 00:25:40 · 474 阅读 · 0 评论 -
hiho一下 第243周 1485 hiho字符串
尺取做法,注意这题是恰好为2个h,1个i,1个o。#include<bits/stdc++.h>using namespace std;string Str;int main(){ while(cin>>Str){ int l= 0,r=-1,n = Str.size(),ans = -1; map<char,int&...原创 2019-03-05 10:47:16 · 184 阅读 · 0 评论 -
hiho一下 第241周 1483 区间价值
题面 :Link题意:n个数,他们相同的数的次数就是区间的价值,求n个数价值第k大区间的价值是?思路:最暴力求出n*(n+1)/2区间不同的值,然后排序求第k大的值,明显TLE。我们先分析发现区间越大,价值肯定越大,并且呈单调性。我们就可以用二分去查找第k大的值。对于每次二分的check,这里利用尺取的思想,尺取从左往右扫一遍最大区间[L,R]里的价值都是小于二分的mid,O(n)时...原创 2019-02-16 10:22:43 · 285 阅读 · 0 评论 -
算法入门竞赛 第五章例题 题解
5-1 Where is the Marble? uva10474 题意:在一排数中查询某个数的位置。 思路:运用STL算法库sort,lower_bound().(查找大于等于x的第一个位置),#include<bits/stdc++.h>using namespace std;const int maxn=10100;int a[maxn];int main(){ int原创 2015-10-25 20:46:50 · 1072 阅读 · 0 评论 -
常用技巧精选.反转(开关问题) poj3276 3279 3185 1244
算法概览:例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置。要将01串全部翻转为0,求最小的翻转次数 形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常有以下的特点,思考一下就可以想到。**1.交换区间得反转顺序队结果没有影响。 2.此外可以知道对于同一个区间进行两次以上得反转是多余的。 3.由此,反转问题(也叫开关原创 2017-03-06 21:16:40 · 2262 阅读 · 0 评论 -
RMQ小结 poj 3264 poj3368
1. 概述RMQ(Range Minimum/MaximumQuery),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题。每次用一个循环来计算区间最值显然不够快,怎么办呢?实践中最常用的是Tarjan的Sparse-Table 算法 ,预处理O(nlgn),但原创 2017-03-16 19:58:16 · 312 阅读 · 0 评论 -
[kuangbin带你飞]专题七 线段树 题解(未完)
[kuangbin带你飞]专题七 线段树题解: A 经典的单点更新,区间求和:#include<bits/stdc++.h>using namespace std;#define root 1,n,1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int N=5e4+10;int n,sum[N<<2];void push_原创 2017-04-05 23:32:59 · 571 阅读 · 0 评论 -
线段树小结
转自于lwt爷爷这篇小结对菜鸡很友好,做完所有题,感觉自己入门线段树了!!线段树小结 A Summary for Segment Tree0. Anouncement 本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵。本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵。 Some of the pictures and th转载 2017-03-28 21:07:42 · 595 阅读 · 0 评论 -
01背包问题总结
总结一下 按照:http://blog.csdn.net/libin56842/article/details/9338841 这个博客 提供的题号(感谢大牛) 和自己多加的几道01背包的题目。其状态转移方程是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}01背包的裸代码:(节省一维空间)for(int i=0;i<n;i++) for(int j=V;j>原创 2015-12-09 01:08:56 · 2574 阅读 · 2 评论 -
树状数组总结
前言:早在知乎看到某位巨巨回答最优美的数据结构:树状数组, 原因是:实现简单,代码优雅,效果拔群。 这么优美的数据结构,怎么能不来一个总结? 树状数组的作用:频繁对于单点和区间修改和查询操作,时间复杂度都是log(n). 关于原理神马,各种神牛博客都有,我就不多加解释. 这里就发一些题解,作为新手入门,大牛可以忽略. 主要操作: 1.追溯其父节点或下辖第一个没有关系的点: (所有原创 2016-04-06 19:08:00 · 5131 阅读 · 0 评论 -
hdu2089不要62 (数位dp入门题)
开始看了很久不是很理解数位dp模板的用法,看了好理解的写法,模范写了一下,理解一点数位dp怎么定义和状态转移。 dp[len][k]:从0到表示长度为len首个数字为k的数字串有满足条件的数量。 那么转移方程很好想。#include<bits/stdc++.h>using namespace std;int dp[10][10];void init(){ memset(dp,0,si原创 2017-04-13 21:16:04 · 988 阅读 · 1 评论