- 博客(310)
- 收藏
- 关注
原创 曼哈顿距离几何意义 矩形面积并
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 2713
原创 升序操作 (二分 贪心)
也可以不用判环,暴力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 449
原创 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 517
原创 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 317
原创 codeforces 700B Connecting Universities (贪心详解)
codeforces 700B Connecting Universities结论思路: 这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献。 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校。 贪心地想,让每条边在学校的路径上最多,所以贡献为min(x,y) 具体实现:一次dfs即可,复杂度O(N) 听起来很有道理,可我不会证呀~~ 然后就
2017-11-04 17:26:29 707
原创 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 434
原创 reverse (模拟)
reverse所有的由A和B构成的字符串,在这种操作下形成了一棵二叉树。根是空串,从根开始,向左走表示施加1号操作,向右走施加2号操作。 知道一个串,我们可以根据它最后一个字符是A还是B把它的父亲还原回来,所以我们有了在这棵树上遍历的能力。 做法就很显然了,我们只需要先让长的那个串一直向上走,知道他们深度相同,然后一起向上走,直到走到同一点,每走一步我们需要O(长度)的时间,最多走O(长度)步,
2017-11-03 16:44:09 388
原创 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 1112
原创 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 293
原创 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 564
原创 BZOJ 2815 灾难 (灭绝树)
BZOJ 2815 灾难Description 阿米巴是小强的好朋友。 阿米巴和小强在草原上捉蚂蚱。小强突然想,如果蚂蚱被他们捉灭绝了,那 么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的 生态灾难。 学过生物的阿米巴告诉小强,草原是一个极其稳定的生态系统。如果蚂蚱灭 绝了,小鸟照样可以吃别的虫子,所以一个物种的灭绝并不一定会引发重大的灾 难。 我们现在从专业一点
2017-11-02 17:16:56 391
原创 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 402
原创 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 401
原创 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 497
原创 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 302
原创 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 280
原创 BZOJ 2744 朋友圈 (最大团)
2744: [HEOI2012]朋友圈Time Limit: 30 Sec Memory Limit: 128 MB Description在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着。一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目。 两个国家看成是AB两国,现在是两个国家的描述: 1.
2017-10-30 21:29:38 530
原创 CodeVs 2245 股票趋势 (二维线段树 zkw)
2245 股票趋势10.30 时间限制: 2 s 空间限制: 128000 KB题目描述 Description 彭先生任职于证券公司,是一位股票分析师。公司经理认为目前的股票分析软件仍可再改进,希望彭先生再设计一套更准确的软件。近日來,彭先生埋头钻研,他发现过去的研究结果,有人提到,如果能在历史资料中,找到与近期股票走势相近的样型,即可使用此历史样型的交易策略,做为近期的买卖策略。为了验证
2017-10-30 20:12:13 374
原创 合并序列
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 451
原创 快来分块 (模拟)
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 255
原创 匹配 (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 280
原创 寿司 (拆环为链 大模拟)
思路: 模拟题,枚举向那个点靠拢。 显然只用考虑一种颜色#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 354
原创 回家 (无向图割点)
思路: 一是要是割点,而是要分开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 303
原创 蚊子 (树形期望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 540
原创 被子
被子(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 351
原创 兔子 (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 325
原创 BZOJ 3210 花神的浇花集会 (切比雪夫 曼哈顿)
3210: 花神的浇花集会Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为 Max
2017-10-27 11:33:39 314
原创 修仙 (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 322
原创 基因的庇护 (AC自动机 dp)
基因的庇护10.25思路: 一道比较典型的AC自动机上DP,只不过需要分析一下性质。 由于每个位置都需要被庇护序列覆盖到,用dp[i][j][k]表示链长为i,在AC自动机上的j号点,当前链上倒数第k个位置是最左的没有被覆盖到的位置时的方案数。预处理出AC自动机上每个结点表示的串的最长的有庇护效应的后缀长度,转移时就看这个长度是否大于等于k+1,若大于等于则说明倒数第k个位置能被覆盖到了,即转移
2017-10-25 20:40:36 252
原创 星空 (状压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 428
原创 将军令 (贪心)
将军令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 458
原创 入阵曲 (组合数 余数统计)
入阵曲10.24思路: 明显的n3复杂度,考虑n2卡住上下界,组合数计数优化,由于模数比较小,我们维护了每一列的前缀之后,就可以O(1)计算固定上下界的前缀矩形的值了。记录每个前缀矩形modK的余数,记录每种余数有多少个,同种余数的前缀矩形相减就是合法。清空不要用memset会T。。。#include <iostream>#include <cstdio>#include <cstring>
2017-10-24 21:09:18 385
原创 分组 (并查集)
分组10.23问题可以转化为,从后往前,选择一段最长的合法区间并分割,重复进行直到完成为止。 从std中收获一种神奇的并查集写法(下面隐藏处),准备研究研究。(按秩合并优化路径压缩??还只有一个数组??看起来就很优)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmat
2017-10-23 20:41:23 415
原创 数颜色 (二分查找 主席树)
数颜色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 326
原创 斐波那契
斐波那契10.23 **100 分做法: 我们来研究一下这个神秘的力量: 依次写下兔子们的标号和他们父亲(从 2 开始): 1 1 1 2 1 2 3 1 2 3 4 5 … 发现其实一定是许多连续段的从 1 开始的序列组合到一起,每段长度依次是斐波那契数列里面的每一项。 为什么会这样呢?** 之前多次二分去找父亲,然后就被卡了三个点的常数。【尴尬#inc
2017-10-23 19:07:54 422
原创 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 738
原创 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 638
原创 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 863
原创 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 381
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人