- 博客(58)
- 收藏
- 关注
原创 2020牛客暑期多校训练营(第三场)
2020牛客暑期多校训练营(第三场)A.Clam and Fish显然有鱼钓鱼,没鱼有饵钓鱼,没鱼没饵做饵B.Classical String Problem问:给定若干操作,每次把string循环右移/左移x位。问第y位是什么取模就行。。。。一开始纯nt,写了splay,T了C.Operation Love有几条边长是整数,可以唯一确定左下角的坐标,然后通过叉积来判断这个向量是大于0还是小于0来判断左手还是右手。D.Points Construction Problem显然:一个单独点+
2020-08-31 00:21:48
192
原创 2020 牛客多校第一场
A. B-Suffix Array后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小。虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的"后缀数组“效果。当然直接修改排序方式可能比较麻烦(都是抄板子),那么不如就对应排序方式修改下原数组的值做个变换就行。题目解法来自论文,。。猜的对就能做B. Infinite Tree虚树的应用:显然点太多不可能全部找出来,只有lca能来点作用问题就是怎么找lca,使用一个树状数组维护各个因数个数由于树的转移都是找的最小因数
2020-08-25 18:21:23
270
1
原创 2020 HDU 杭电多校第六场
2020 HDU 杭电多校第场六场Little Rabbit’s EquationDivisibilityA Very Easy Graph ProblemRoad To The 3rd BuildingExpectationFragrant numbersLittle Rabbit’s Equation 题目大意: 给一串数字符号表达式,形如"A1+30=B5" 判断这个最少是几进制的, 由于数据很小,直接模拟,注意每个数字必须严格小于进制数#include <
2020-08-07 00:23:58
559
原创 【带权值并查集】 hdu 3038 How Many Answers Are Wrong?
题目大意:假设你有一组数列:给出一系列三元组(l,r,val) 表示[l,r]的区间和为val不断地给出这样的三元组,有时候三元组会有不可能地情况出现。问有多少个错误的情况出现:其实自己想,很难想到这个题目居然是道并查集额外维护一个数组sum[x] 表示从头节点fx->x 的区间和1.如果询问(x,y,val)是,xy在同一个集合里,那么就可以判断sum(x)-...
2018-10-24 22:30:16
151
原创 【并查集】 映射拆点 uva 11987 Almost Union-Find
题意:维护一个数据结构,能够支持三种操作:1、将p,q元素并入一个集合中2、求出p元素所在集合元素个数、元素之和3、把元素p从原集合移动到元素q所在集合 显然是一道并查集的题目,需要额外维护的数据是size[]和sum[],这都是很容易实现的。问题在于如何进行第三个操作1、如果只是纯粹朴素的移动,一旦p是个父节点,会使得把p的所有子节点也给带走,所以这么做法行不通...
2018-10-24 22:13:48
143
原创 【最短路径树优化】 uva 1416 Warface And Logistics
题目大意:给出一张无向图,求删除一条边后,对于所有的点对(i,j)使得 c = Sum(d[i][j)]最大的值。 分析:如果仅仅是枚举删除某一条边,是非常差的做法,我们要得到以下几点信息:首先我们要明确,如果删除这么一条边——不在任何一条最短路径a->b上的边,那么显然c的值不会受到任何的改变。因此我们需要尝试枚举删除的边,都应该在某条最短路上。 在求初始c的时...
2018-09-29 20:09:27
204
原创 【带有估值函数的DP】 uva 10859 Placing Lampposts
题目大意:给一颗无向图树,每个节点都可以放灯,灯能点亮相邻的边,求怎么样才能把所有边都点亮。如果有多种方案:给出一个能够让有两盏灯同时找到路情况最多的方案。 解析:如果去掉后面的条件,就成为了一个很简单的树上dp。如何处理同时两盏灯找到的情况呢?通常情况下:我们会将无根树变为有根树,建立一个dp[i][j] ,表示遍历为所有i及其子节点后,情况为j(0/1,放/不放)时的方案总...
2018-09-29 19:56:47
139
原创 【tarjan(scc)+缩点】 hdu 2767 Proving Equivalences
题目大意:有n个命题,和一些于a->b的推导式子,问还需要几个证明能保证这些命题等价。 思路: 连通分量里的点自然是已经互相等价了。我们可以缩点,然后判断还需要加多少遍是的后来的点图成为一个强连通分量。与找scc个数不同的是,如果某两个scc之间存在着边,那么后来新图中的点上这两边也存在。而且可以确定的是,这些边必然是从某个scc到另一个scc点,因为一旦是双向边...
2018-09-29 19:34:31
202
原创 【dijkstra变形】 uva 11367 Full tank?
题目大意: 在一张无向图中,你的车要从起点走到终点。你走多少距离要耗费多少油。每个地方加油的钱不一样,你可以不加,加一个单位,加满。。。。油量箱是有上限的。 一开始你的车油容量为空。 求到终点最便宜花多少钱。节点:n <= 1000 油容量 c <= 100询问次数 q <= 100 思路一:第一眼见到的是拆点,把三元组(u,cost,oil)分别连边,可惜...
2018-09-29 19:05:13
132
原创 【缩点+tarjan(scc)】 uva 11324
题目大意:在一张有向图中,我们把有这样性质的点的集合S称之为Clique(派系?)对于任意在S中的两个点x,y 存在x->y的路径或(包含)存在y->x的路径 思路:首先要明白,如果存在强连通分量,那么在这个强连通分量里的所有点他们都是一样的,有你的肉就少不了我一杯羹。因此我们事实上可以把一个强连通分量缩成一个点,点权为scc的大小。然后我们又重新的到了一张无环...
2018-09-29 18:57:30
119
原创 【二分+bellmanford判负环】 uva 11090 Going in Cycle!!!
题目大意:给出一张有向图,求出平均值最小的环 思路一:第一种算法就是dfs找环,每找到一个环,求出其平均值。然而别看n<50,想造出这样的数据也是分分钟的事情。 思路二:bellmanford算法就是为带权的图而生的。bellmanford的更新条件比较苛刻,不像dfs那么随意地找。 对于平均值最小,xx值最x,我们通常使用二分的方法,假设这个最...
2018-09-29 18:45:18
117
原创 【图的再构造】 uva 10917
题目大意:一张无向图上面有Jimmy的家和Jimmy的公司。Jimmy必须要走满足一下条件的路:如果Jimmy要从A走到B,必须存在一条以B为起点的路径,比从任何一条以A为起点的路径短。 思路:所谓的“必须存在一条以B为起点的路径,比从任何一条以A为起点的路径短。” 也就是说,从A开始的最短路径比从B开始的最短路径短。 因此跑完一边最短路径后,我们对所有d[x] > d[y]的点...
2018-09-29 18:33:39
166
原创 【滑动窗口】uva 1330 City Game
题意:有一个矩阵,上面有F和R,求最大由F组成的子矩阵的大小N <= 1000 思路一:DP,4维,不可不可。 思路二:“二维滑动窗口”。自底向上,自左向右扫描,让len(i,j)表示往下到底F最长的长度,left(i,j),right(i,j)表示从右到左同样是len(i,j)能够扩展到多远。 有这样的状态转移:len(i,j) = len(i-1,j) + 1。 ...
2018-09-29 18:26:05
178
原创 【动态规划】 EOJ 3338 双塔问题
Time limit per test: 1.0 seconds Memory limit: 256 megabytes Alice 和 Bob 在玩积木游戏。他们找到了 n 块积木,这些积木都是正方体,棱长分别为 a1,a2,…,an。现在 Alice 和 Bob 要用这些积木垒两座高塔。他们想要这两座高塔的高度...
2018-05-02 23:00:36
1012
4
原创 【数学】 一些的数学题
Uva 11401 Counting triangles大意: 给一个n,问从边长为1,2,3...........n 中能够组成几个三角形。分析:1.n<=3 肯定不行 2.换个思路,令f(x)表示从1.....x中必须取x能够组成三角形的个数, s(x) 表示所有情况。易得s(x) = s(x-1) + f(x)。因此我们接下来只要考虑f(x)怎么求即可。 ...
2018-04-28 22:03:15
275
原创 【poj 2352】 Stars 及浅谈树状数组
树状数组: 1、 一个可以动态维护前缀和的一个数据结构,支持求和和单点修改。在拓展情况下可以支持区间修改。 2、 优点:代码短,O(lgn)的开销lowbit是非常有用的 x&(-x) 利用补码的性质得出最低位的数字。核心代码:inline int lowbit(int x){ return x&(-x);}void add(int x,int val)...
2018-04-14 22:43:27
173
原创 【ZOJ 2112】 线段树套平衡树
题目大意: 给定一个数列,定义两种操作:1、修改第n个数的值2、求[l,r]区间内第k大的值。方法:线段树维护区间,treap树维护第k大(splay当然也可以)树套树第一题。。没想到真的是每个线段树上的节点建一棵平衡树。。。。。然后修改值就是在所有相关区间内的平衡树里,erase一个值再insert一个值。。。。简直恐怖查询就是二分答案,因为每个区间都有一棵树,所以可以很快就可以在O(lgn)里...
2018-04-14 09:57:38
283
原创 【POJ 2985】 The k-th Largest Group Treap+并查集
Treap:佛系平衡树,爱转不转,靠随机,靠随缘,只有单旋转。比普通的二叉树多一个priority值,保存结点的权重用随机数生成。如果一个节点的儿子比他的父亲优先级大【或小】,就执行一次单选转。期望平均O(nlgn) 可以说是很随缘了。删除稍微复杂一点:1、叶子节点,直接消失。2、没有左儿子/右儿子,把该节点反复执行相应旋转,转到情况1,直接删除。3、朝优先级低的那方向转。模板const int ...
2018-04-13 22:36:08
190
原创 【指针1】 指针减法 数组索引与数组指针 指针的强制转换
一、同类型指针可以做减法:比如:#include <iostream>using namespace std;int arr[1230];int main() { int *a = &arr[4]; int *b = (arr + 1); int c = a - b; cout << c << endl; // c 的值为 4-1 = 3...
2018-04-11 12:09:04
627
原创 【ECNU OJ 2918】k-th number 可持久化线段树 + 离散化
什么叫可持久化线段树?我看到非常一个犀利的解释:“线段树是让你在区间内进行修改以及询问的一个数据结构,但可持久化线段树就是想考考你,询问第x个版本的线段树的结果” 先要明白我们不可能真的取造n个线段树,必然是分分钟TLEMLE。 而是要在原来的线段树上进行操作,才能达到目标。 说实话,其实构建方法很简单巧妙。1、 首先要明确的一点是:由于可持久化线段树保存历史版本,不能像原先一样利用二进制的特点,...
2018-04-11 10:33:43
152
原创 【线段树(递归版)】—— 点修改 区间覆盖 区间修改
线段树接触了也很久,但总是没一个安定的写法,各种花里呼哨的都写过,老实的时候连指针版的都写过。但款式那么多并没有用,到时候用起来反而坑坑洼洼的,还不如定一个标准模式。虽然是非递归的线段树代码简单而高效,但是万事慢慢来,从最基础简单的在博客开始写起。此次我们介绍的是递归版的线段树。“线段树是一种特殊的区间树“线段树是什么东西?简单的说,线段树是把 [1,n] 一段区间不断二分二分,直至每个树的节点是...
2018-04-10 19:09:34
1391
原创 【ECNU OJ 3378】 Hidden anagram
上一篇字符串哈希写完后,写这篇就容易多了。没看过的可以参考 https://blog.csdn.net/wodasini/article/details/797883743378. Hidden Anagrams题目大意: 给出两个字符串 寻找满足以下条件的最长子串长度: 1、要求子串连续。 2、要求这两个子串内每个字符含量相等还是直接讲例子...
2018-04-02 18:55:57
190
原创 【ECNU OJ】EOJ 3424 以及 浅谈字符串哈希
"哈希——优雅的暴力”终于在学校oj的millioaire刷到第一页了,开始补题。哈希能做什么?哈希能够帮你把一段字符串转换成数字,从而当预处理得当,可以在O(1)的时候比较两个字符串是否相同(仅仅是相同。通常以下方法构造: 观察上述公式(我的latex用的巨垃圾): 定义Hash(i,L) = H(i) - H(i+L)x^L展开后等于:Hash(i,L) = s[i+L-1...
2018-04-02 14:31:44
360
原创 ECNU 2018 程序能力实训第一次机考(下午场)
https://acm.ecnu.edu.cn/contest/64/A.闪卡销售 公司有 n 种类型的闪卡要出售,闪卡类型编号为 1,2,3,…,n,第 i 种类型的闪卡数量为 ai。现有多个收购商给出的 m 条关于闪卡的报价信息 (p,q),表示收购第 p 种类型的闪卡的单价为 q。请计算公司如何销售,才能获得最多收益。每个收购商可以收购无限量的闪卡。 ...
2018-03-31 21:11:03
1317
1
原创 AC自动机 —— 多模式匹配 模板、个人理解及详细注释
解决单个字符串匹配的方法是KMP算法得益于其next数组,整个算法时间复杂度被显著压缩。在O(n+m)的时间内即可以算出模式匹配。 AC自动机是一个支持多模式匹配的算法。也就是给出模式串A1,A2,A3……An,以及一个字符集S在模式串长度不大的情况下算出匹配数有N个模式串,平均长度为L;文章长度为M。建立Trie树:O(N*L) 建立fail指针:O(N*L) 模式匹配:O(M*L) 所以,总时...
2018-03-29 17:49:27
211
原创 【ECNU OJ 1888】陆行鸟挖宝 最短路径
Problem #1888你坐在陆行鸟上进行一个挖宝任务,陆行鸟有三种移动方式,假定移动前的坐标为 X,则:1. 移动到 2X 的地方。2. 移动到 X−1 的地方。3. 移动到 X+1 的地方。为了尽快挖到宝物而不至于被别人先挖到,你需要选择最快的方式挖到宝物。 题解:1.这道题的tag是最短路径.....其实可以理解,每一个数字连3条边。比如10->11,10->9,10->...
2018-03-24 14:57:11
300
原创 EOJ 爬虫 —— 爬取并分析题目的回报、难度、收益
代码粗糙,水平有限。最近才发现我们学校的OJ原来每题的EMB会变化的有的时候刚A掉一道题,夸嚓,直接掉了1EMB。又想赚钱,又想写难度比较简单的题,就懒人的精神上来了。花了一会儿时间写了个爬虫,把我们学校OJ的题目,把EMB,Solves,Submissions,Accepts,之类的保存下来题目的难度大致取决于两个因素:1.人次通过率(尝试人数/通过人数)2.通过人数(至于为什么不判断提交通过率...
2018-03-24 12:11:38
275
原创 【ECNU OJ 3373】 骑士游戏 最短路径+动态规划
Problem 3373 骑士游戏 长期的宅男生活中,JYY 又挖掘出了一款 RPG 游戏。在这个游戏中 JYY 会扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽。在这个游戏中,JYY 一共有两种攻击方式,一种是普通攻击,一种是法术攻击。两种攻击方式都会消耗 JYY 一些体力。采用普通攻击进攻怪兽并不能把怪兽彻底杀死,怪兽的尸体可以变出其他一些新的怪兽,注意一个怪兽可能经过若干次普通攻击后...
2018-03-24 12:06:43
542
1
原创 【ECNU OJ】tag = shortest paths (上)
Problem #3323 罗塞塔石碑EOJ 3323 大意:字母可以相互表示,有向图连接,询问一串字符是否能够被领一串字符表示解法:裸floyd Problem #3200 SixDegree of Cowvin BaconEOJ 3200大意:牛之间有距离。求一头牛到其他牛距离和最小的平均值,并将其乘以100后输出。解法:裸floyd Problem #3196 WormholesEOJ 31...
2018-03-23 12:52:14
144
原创 【ECNU OJ 3458】Cards Game 最小生成树
题目大意: 给你一堆牌,牌有红蓝面,每面上有个数字,每次取两张,获得一个值,可以说A的红面与B的蓝面的异或,也可以是A蓝^B红。 最后会剩下一堆牌,求如何让取到的值最小。 。。其实题目看懂了就是道裸题======= 两个点的边权为 min(a.r^b.b,a.b^b.r) 然后跑mst吧。。。。 (PS:刷钱的话记得有small...
2018-03-22 09:21:15
207
原创 【ECNU OJ 3198】挖井 最小生成树
https://acm.ecnu.edu.cn/problem/3198/ Problem: FJ 决定给他分别用 1 到 N 编号的牧草浇水,他可以直接在一颗牧草旁边直接挖一口井来获得水,也可以用管子从任意有水的牧草那里来获得水。 在第 i 颗牧草旁边挖一口井的代价为 Wi,用管子连接第 i 与第 j 颗牧草的代价为 Pij(Pij=Pji,Pii=0)。请求出 FJ 浇灌这些牧草花费...
2018-03-22 09:12:54
490
原创 【ECNU OJ】 tag = flows 上部分
Problem #2182:EOJ 2182 Dining 题目大意:老题了。食物,饮料分配给奶牛,每头牛有他爱吃和不爱吃的。求怎么匹配能让更多牛满足。 思路:1、只要熟悉网络流就应该会想到一个 S-水-牛-饭-T 一类的建图。每条边权值为1,类似于二分图匹配,然后高高兴兴地跑了一遍最大流。然后错了。 2、然后你就开始想这是怎么回事,在草稿纸上开始画起了图。S——A1——B1——C...
2018-03-19 18:35:46
256
原创 泛化背包问题
简写,笔录,不写太多。 概要: 给出若干物品,对于每个物品的投入x,会得到一个特定回报f(x) 已知总投入为M元,求能得到的最大回报N元。方程即为:dp(x) = max{ dp(x),dp(a) + l(x-a)} (A式) .这是对于线性数据而言的,没有依赖关系。在树上学习到了一个很厉害的写法: 一般来说
2016-09-18 23:02:57
1405
原创 Treap 树
Treap树堆 是一种 随机平衡二叉树。相对于正正规规的AVL树,倒是灵活了许多。Treap 也有旋转模式,但是只有单选转,而且Treap的旋转,怎么旋转,该不该旋转完全是随机化的,这样子在大大减少了编码量的同时,相对也把效率给提了上去。在最差情况下也比最差情况下的朴素 BST 好代码参考 《Data Structure and Algorithm Analysis in C》
2015-12-22 19:20:22
334
原创 poj 1416
题目大意: 将一串数字分成若干个部分 ( 例如12346) 求其中和不超过数字 n (例50) 的最大值。 比如说 12346 可以分成 12+34+6 = 52 1+2+34+6 = 43 其中43满足,52不满足,因为不允许超过。注意: 1、123 可以拆成 1+23 12+3 ,但13+2是不允许的。 21+3,3
2015-12-14 19:51:22
303
原创 选择客栈 noip2011
在openjudge上做的题目,原来是2011年的=====。题目:丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相
2015-12-12 21:11:14
851
原创 LIS (最长上升字序列) nlgn 解法
LIS, 一道比较经典的动态规划题目。对于长为n的序列 F[n] = max{F[k] + 1,F[n] | if arr[k] 时间复杂度 O(N^2) 线性空间。最近看到网上的一种 nlgn的解法,深受启发:思路是这样的: 令一个数组 pos[x] 来表示上升序列中第i个数字最小是多少。 从 arr[i] ~arr[n] 遍
2015-12-07 19:27:03
636
原创 字符串类DP Align
【问题描述】考虑两个字符串右对齐的最佳解法。例如,有一个右对齐方案中字符串是AADDEFGGHC和ADCDEGH。AAD_DEFGGHCADCDE__GH_每一个数值匹配的位置值2分,一段连续的空格值-1分。所以总分是匹配点的2倍减去连续空格的段数,在上述给定的例子中,6个位置(A,D,D,E,G,H)匹配,三段空格,所以得分2*6+(-1)*3=9,注意,我们并不
2015-12-06 20:24:54
1336
转载 数字划分类 dp
转载自http://www.cnblogs.com/wanghetao/archive/2013/11/25/3442192.html 整数划分 --- 一个老生长谈的问题:描述整数划分是一个经典的问题。请写一个程序,完成以下要求。 输入每组输入是两个整数n和k。(1 输出对于输入的 n,k;第一行: 将n划分成若干正整数
2015-12-06 20:14:48
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人