自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

w4149

T.T.

  • 博客(310)
  • 收藏
  • 关注

原创 LeetCode刷题笔记 剑指Offer 1~29

1~29

2022-03-08 09:28:04 140

原创 曼哈顿距离几何意义 矩形面积并

11.7思路: 二分ans,把所有长度>mid的(lf,rg)都搞出来, 然后我们要找出一个点对(u,v),使得|x - u| + |y - v| <= mid。 考虑几何意义,曼哈顿距离的图像限定。 把一个区间(lf,rg)转换成一个点(x,y)。 对于每个点(x,y),我们构建出一个以(x,y)为几何中心, 对角线长2*mid,且对角线平行于坐标轴的正方形。 满足条件的(u,v)就

2017-11-07 17:39:56 2440

原创 升序操作 (二分 贪心)

也可以不用判环,暴力check,按照顺序暴力跑(看代码吧)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 400010using namespace std;int n, cnt;int a[N], b[N];inline in

2017-11-07 17:29:19 402

原创 b进制分解 加乘最小步数

b进制分解#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 1000010using namespace std;int S, T, a, b;int f[N], pw[110];int run(){ f[S] = 0;

2017-11-07 17:24:27 466

原创 kill (二分 贪心)

kill思路: 二分ans后,直接贪心暴力check。 每个人去打他能打得到的最远的怪兽。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define N 100010using namespace std;int n, m, S;LL go

2017-11-04 17:29:47 291

原创 codeforces 700B Connecting Universities (贪心详解)

codeforces 700B Connecting Universities结论思路: 这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献。 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校。 贪心地想,让每条边在学校的路径上最多,所以贡献为min(x,y) 具体实现:一次dfs即可,复杂度O(N) 听起来很有道理,可我不会证呀~~ 然后就

2017-11-04 17:26:29 671

原创 BZOJ 4423 Bytehattan (对偶图 并查集)

4423 【AMPPZ2013】 BytehattanDescription 比特哈顿镇有n*n个格点,形成了一个网格图。一开始整张图是完整的。 有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通。Input 第一行包含两个正整数n,k(2<=n<=1500,1<=k<=2n(n-1)),表示网格图的大小以及操作的个数。 接下来k行,每行包含两条信息,

2017-11-03 21:09:03 409

原创 reverse (模拟)

reverse所有的由A和B构成的字符串,在这种操作下形成了一棵二叉树。根是空串,从根开始,向左走表示施加1号操作,向右走施加2号操作。 知道一个串,我们可以根据它最后一个字符是A还是B把它的父亲还原回来,所以我们有了在这棵树上遍历的能力。 做法就很显然了,我们只需要先让长的那个串一直向上走,知道他们深度相同,然后一起向上走,直到走到同一点,每走一步我们需要O(长度)的时间,最多走O(长度)步,

2017-11-03 16:44:09 362

原创 Tree (树上期望dp)

Tree11.2 和 11.311.2考虑1个随机过程,第1次走到u号点的时间可以分成两部分,第1部分是从1号点随机游走第1次走到u的父亲p的时间,第2部分是从p开始走,第1次走到u的时间,由期望的线性性,第1次走到u的时间期望等于这两部分期望的和。第1部分是一个子问题,我们考虑怎么解决第2部分,我们把这个问题变成1棵树(并且根节点脑袋上也有1条边),从根节点开始随机游走,走出这棵树期望的时间,我们

2017-11-03 16:32:10 976

原创 Rank 后缀排序求原串(贪心)

Rank11.3对于后缀排名最小的那个位置, 不妨令它为’a’. 本着让使用的字母尽可能少的原则, 对于两个排名相邻的位置i, j, 设rank[i] < rank[j], 那么如果rank[i+1] < rank[j+1]那么i和j位置上的字符就能够相同, 否则不能. 那么从排名为1的往后推就可以了, 至于字典序最小并没有什么用.#include <iostream>#include <cstd

2017-11-03 14:46:26 274

原创 Hanoi 多汉诺塔问题 (dp)

Hanoi11.3类比只有三个柱子的汉诺塔, 设f[i][j]为有i个盘子j个柱子时的最少步数. 那么肯定是把一些上面盘子移动到某根不是j的柱子上, 然后把剩下的盘子移动到j, 然后再把上面的盘子移动到j. 于是就有递推式f[i][j] = min{f[k][j] * 2 + f[i - k][j - 1]}.#include <cstdio>#include <iostream>#includ

2017-11-03 14:25:39 516

原创 BZOJ 2815 灾难 (灭绝树)

BZOJ 2815 灾难Description 阿米巴是小强的好朋友。 阿米巴和小强在草原上捉蚂蚱。小强突然想,如果蚂蚱被他们捉灭绝了,那 么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的 生态灾难。 学过生物的阿米巴告诉小强,草原是一个极其稳定的生态系统。如果蚂蚱灭 绝了,小鸟照样可以吃别的虫子,所以一个物种的灭绝并不一定会引发重大的灾 难。 我们现在从专业一点

2017-11-02 17:16:56 359

原创 BZOJ 4565 字符合并 (区间状压dp)

4565: [Haoi2016]字符合并Time Limit: 20 Sec Memory Limit: 256 MB Description有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。Input第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k

2017-10-31 21:43:23 378

原创 BZOJ 2125 最短路 (拆环重建图 lca spfa)

2125: 最短路Time Limit: 1 Sec Memory Limit: 259 MBDescription给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径。Input输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个整数v,u,w表示一条无向边v-u,长度为w 最后Q行,每行两个整数v,u表示一组询问Output输出Q行,每行

2017-10-31 17:03:52 372

原创 sumcomb (组合数)

10.19找规律题目,在图上推推就发现,一个是起点下面的数,一个是起点右下角的数。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define LL long longusing namespace std;const LL mod = 1e9 + 7;LL mub[1000010];LL

2017-10-31 07:51:59 464

原创 pay 解方程 (exgcd)

10.19思路: exgcd解方程,等差数列求和#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define LL long longusing namespace std;LL a, b, c;LL x, y;LL gcd(LL aa, LL bb, LL &x, LL &y){

2017-10-31 07:48:22 274

原创 stone 质检员 (二分)

stone 质检员10.30我们可以很容易的发现,随着W 的增加,Y 是单调减小的, 所以说我们可以用类似于二分的方法求出最接近标准值的W,每 次尝试可以在O(n)的时间计算出Y,所以总复杂度O(nlogn)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long

2017-10-30 21:46:17 256

原创 BZOJ 2744 朋友圈 (最大团)

2744: [HEOI2012]朋友圈Time Limit: 30 Sec Memory Limit: 128 MB Description在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着。一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目。 两个国家看成是AB两国,现在是两个国家的描述: 1.

2017-10-30 21:29:38 491

原创 CodeVs 2245 股票趋势 (二维线段树 zkw)

2245 股票趋势10.30 时间限制: 2 s 空间限制: 128000 KB题目描述 Description 彭先生任职于证券公司,是一位股票分析师。公司经理认为目前的股票分析软件仍可再改进,希望彭先生再设计一套更准确的软件。近日來,彭先生埋头钻研,他发现过去的研究结果,有人提到,如果能在历史资料中,找到与近期股票走势相近的样型,即可使用此历史样型的交易策略,做为近期的买卖策略。为了验证

2017-10-30 20:12:13 349

原创 合并序列

10.29思路: 多路并行问题,写了个比较暴力的做法,开O2就是能过的。 同样可以用二分。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#define LL long long#define N 100010using namespace std;i

2017-10-30 19:43:37 415

原创 快来分块 (模拟)

10.29思路: 模拟题,拿两个指针向中间逼近,就是细节有点恼火,拍出好多错【汗 二分也OK,二分pos,二分ans,随便搞都能水过去。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 100010using namespace

2017-10-30 19:41:31 241

原创 匹配 (KMP)

10.28思路: 简单kmp,特判一下就好。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 400010//using namespace std;int lena, lenb, len;char a[N], b[2];in

2017-10-30 19:35:28 260

原创 寿司 (拆环为链 大模拟)

思路: 模拟题,枚举向那个点靠拢。 显然只用考虑一种颜色#include #include #include #include #define LL long long#define N 1000010using namespace std;int len;char s[N];int a[N], cnt, num;LL sum, pos, ans = (1LL 61)

2017-10-29 18:33:50 327

原创 回家 (无向图割点)

思路: 一是要是割点,而是要分开1和n。 我们通过判断一个割点的儿子能不能到达n,因为割点的儿子跟1是不相连的(从1开始的dfs)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#define LL long long#define N 200010#

2017-10-29 18:27:03 284

原创 蚊子 (树形期望dp)

蚊子(mosquito)10.26首先每只蚊子的贡献是独立的.如果一只蚊子经过了k个会被灭蚊器影响的点那么这个蚊子对答案的贡献是1-(1-p/q)k. 用1遍bfs求出哪些点是被灭蚊器影响的点.然后进行不同的处理. n为树的点数,m为叶子节点数. 算法1: 对于每一只蚊子,做一遍bfs,O(m2)次bfs,复杂度O(nm2),期望得分10分 算法2: 通过一次bfs我们可以统计出一个叶子

2017-10-29 18:17:59 484

原创 被子

被子(quilt)10.26来自atcoder code festival 2017 qual A的C题.主要和字母数目奇偶性相关,选手可以自行去atcoder.jp查看题解(逃 为了尽量卡低错误做法的分数,极限数据进行了捆绑. 严谨(划掉)的题解: 算法1: 直接枚举所有的重新排列方式并检验,可以通过第1,2个测试点. 算法2: 对于n=1的情况,分m为奇为偶两种情况处理.m为偶时只需

2017-10-29 18:14:31 330

原创 兔子 (dp)

兔子(rabbit)10.26第1,2个测试点: O(n!). STL中的next_permutation()就可以得到这20分 第3,4个测试点: O(n!)打表,O(1)回答. STL中的next_permutation()跑个几分钟就出来了 第5,6,7个测试点: O(2n*n2)状压DP,f[S][i][0/1]表示已经使用了数字集合S中的数字,最后一个数字是i,最后一个数字比倒数

2017-10-29 18:12:38 296

原创 BZOJ 3210 花神的浇花集会 (切比雪夫 曼哈顿)

3210: 花神的浇花集会Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为 Max

2017-10-27 11:33:39 286

原创 修仙 (KMP)

修仙10.25前100%的数据:看样子就是道KMP的题对吧。仔细想想KMP的性质,fail[i]则说明s[1,fail[i]]=s[i-fail[i]+1,i],说明这个前缀在(i-1fail[i]+1,i)出现过,实际上我们只用考虑长度,因为同一个长度对应的前缀相同。于是对于2<=i<=n-1,标记一下fail[i]这个长度出现过(既是前缀又是中缀)。再从n开始不停跳fail,直到跳到一个位置t(

2017-10-25 20:42:24 294

原创 基因的庇护 (AC自动机 dp)

基因的庇护10.25思路: 一道比较典型的AC自动机上DP,只不过需要分析一下性质。 由于每个位置都需要被庇护序列覆盖到,用dp[i][j][k]表示链长为i,在AC自动机上的j号点,当前链上倒数第k个位置是最左的没有被覆盖到的位置时的方案数。预处理出AC自动机上每个结点表示的串的最长的有庇护效应的后缀长度,转移时就看这个长度是否大于等于k+1,若大于等于则说明倒数第k个位置能被覆盖到了,即转移

2017-10-25 20:40:36 229

原创 星空 (状压dp)

星空10.24思路: 链接#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#define INF 0x3f3f3f3f#define N 40010#define P 18using namespace std;int n, k, m, cnt = 0

2017-10-24 21:30:50 404

原创 将军令 (贪心)

将军令10.24思路: 其实就是BZOJ 1117 救火站Gas 的简单版,其实就是O(n)的,哪里来的k!!!#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>#define LL long long#define N

2017-10-24 21:18:17 419

原创 入阵曲 (组合数 余数统计)

入阵曲10.24思路: 明显的n3复杂度,考虑n2卡住上下界,组合数计数优化,由于模数比较小,我们维护了每一列的前缀之后,就可以O(1)计算固定上下界的前缀矩形的值了。记录每个前缀矩形modK的余数,记录每种余数有多少个,同种余数的前缀矩形相减就是合法。清空不要用memset会T。。。#include <iostream>#include <cstdio>#include <cstring>

2017-10-24 21:09:18 363

原创 分组 (并查集)

分组10.23问题可以转化为,从后往前,选择一段最长的合法区间并分割,重复进行直到完成为止。 从std中收获一种神奇的并查集写法(下面隐藏处),准备研究研究。(按秩合并优化路径压缩??还只有一个数组??看起来就很优)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmat

2017-10-23 20:41:23 386

原创 数颜色 (二分查找 主席树)

数颜色10.23写了个主席树,结果Tdiao了。。。#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#define N 300010using namespace std;struct node{ int sum; node *ls, *rs; void update

2017-10-23 19:12:52 301

原创 斐波那契

斐波那契10.23 **100 分做法: 我们来研究一下这个神秘的力量: 依次写下兔子们的标号和他们父亲(从 2 开始): 1 1 1 2 1 2 3 1 2 3 4 5 … 发现其实一定是许多连续段的从 1 开始的序列组合到一起,每段长度依次是斐波那契数列里面的每一项。 为什么会这样呢?** 之前多次二分去找父亲,然后就被卡了三个点的常数。【尴尬#inc

2017-10-23 19:07:54 396

原创 ccount 进制拆分(Lucas 数位dp)

ccount10.20思路: 对于一个C(n,m) 我们要求的就是它%5后是否为0。 这个nm太大了,我们没有办法直接计算,又发现这个模数P=5是个质数。 考虑Lucas,分解之后就会成为C(a1,b1) * C(a2,b2) * … * C(ai,bi)。 0 <= ai,bi <= 4 要让C(a1,b1) * C(a2,b2) * … * C(ai,bi) = 0 (mod 5),只

2017-10-20 19:21:10 677

原创 group 求阶(BSGS 欧拉定理)

group10.2030% 直接暴力算数列,直到遇到一个出现过的数,这样后出现的数前面一定都出现过了,所以直接看当前出现的数有多少个不同即可。 复杂度: O(T mod) 100% 因为gcd(a, mod) = 1,所以本质上那个数列是一个”环”,即是某一段数一直重复。 因为a^(phi(n)) = 1(mod n),所以该最小循环节一定是phi(n)的约数(我们证明过的)。 所以我们

2017-10-20 19:15:17 602

原创 facsum (线性筛 积性函数)

facsum10.20思路: 对于式子进行分析,前面的Phi就是一个很常规的转化,变成i^m。后边一个约数个数,一个Mobius,一个单位函数都是积性函数,所以卷起来也就积性啦(不是积性怎么做嘛。。) 于是就上线性筛了。 对于 if(i % prime[j] == 0) 的情况,也就是 f[p^k*c] = f[p^k] * f[c]。 所以我们只用考虑 f[p^k] 如何计算,d就是p^

2017-10-20 19:08:44 821

原创 Kor (数学题...)

kor10.19思路: 考虑维护cnt数组,cnt[i]表示是i的数有几个。 考虑维护从cnt1数组,cnt1[i]表示是i的二进制子集的数有几个。 显然cnt1可以从cnt转移过来,但是为了优化时间复杂度,我们选择把cnt和cnt1合并为一个数组用2^20*20的时间处理出来。 代码如下void sumup() { for(int i=0; i<P; i++) {

2017-10-19 22:08:25 353

空空如也

空空如也

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

TA关注的人

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