自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aozil_yang的博客

点滴记录,记录成长,帮助你我!

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

原创 POJ 2528 Mayor's posters (线段树区间赋值 + 离散化)

题意:给你n 个海报的左端点和右端点  依次贴好后, 求最后能看见几个海报?思路:正常思路想到的是把2n 个端点依次离散化,然后区间赋值,然后查询线段树上每一个区间,最后统计赋值数的种类。但是这样有个小坑:例如1 - 10  1 - 4 6 - 10, 离散化后 区间是 1- 4  1- 2  3 - 4  这样 就把1-4 给覆盖掉了, 就会少数一个海报。得到2n 个

2017-06-06 18:10:34 445

原创 蓝桥杯 历届试题 剪格子 (dfs回溯)

题意:把一个矩形格子分成两部分, 使得两部分和最小, 并且包含左上角的区域格子数最少?思路:一开始想的非常麻烦, 题意理解有些出入, 想去状态压缩去了, 想的非常麻烦。但这个题目 数据量很小。直接回溯就好了。从左上角格子开始, 不断的dfs搜索, 当前和为总和一半时 直接更新答案。#include #include #include using namespace

2017-05-16 20:08:09 528

原创 蓝桥杯 历届试题 带分数 (暴力枚举)

题意:求n的带分数的种类,使得1~9各出现一次。思路:直接暴力枚举即可先o(n) 枚举 前面的整数, 在枚举后面的分数, 后面分数 加前面的整数 位数和超过9 个就剪枝了#include #include #include using namespace std;typedef long long LL;LL gcd(LL a, LL b){ return

2017-05-16 17:17:27 1020

原创 HDU 4607 Park Visit (树的直径)

题意:一棵树上n 个结点, 问你m个询问, 每个询问问你访问树上x 个结点最少走几步?思路:先求出树的直径的结点个树num。如果x 否则 肯定是num 个点走直径,剩下的点 离开直径在回到直径, 乘以2即可。#include #include #include #include #include using namespace std;const int ma

2017-05-15 21:28:45 478

原创 蓝桥杯 历届试题 大臣的旅费 (树的直径 BFS)

题意:给你一棵树,求树上最长距离。思路:也就是求树的直径两遍bfs即可, 第一次从任意一个点开始bfs, 找出最长距离, 并记录点在哪(记为s),那么s 一定是树直径上的一个端点。在从s bfs一遍即可。原理: 设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点证明:1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w

2017-05-15 20:46:56 471

原创 BZOJ 3224: Tyvj 1728 普通平衡树(替罪羊树)

题意:替罪羊裸题:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数)算是整理替罪羊模板了注意:Rank(x) 求的是大于等于x 的最小排名。#include#incl

2017-05-05 16:13:27 684

原创 UVA 11107 Life Forms(后缀数组+二分)

思路:后缀数组+二分:我们先把n 个字符串用不同的字符连接起来,注意最后要加上一个字符。然后求这个字符串的后缀数组。然后二分答案,判断长度len 是否可行。 判断方法是同样的套路,给sa数组进行分块,每一块都大于等于长度len,然后判断每一块是否有超过一半的串在这一块中出现, 可以开一个flag数组, 记录每一块的字符串, 最后统计flag数组即可。这样我们二分得到了最长长度l

2017-05-03 22:36:27 404

原创 POJ 3261 Milk Patterns (后缀数组 + 二分)

题意:给你一个两万的数组, 求可重叠的K次最长重复子串。思路:后缀数组经典问题类似于求不可重叠的最长重复子串。先求一遍后缀数组, 给sa数组 分块。二分长度m每一块 height 必须大于等于  长度m。然后如果存在一块, 满足数量大于等于k  那么这个长度m就是合法的。 继续二分即可。#include #include #include #include

2017-04-28 18:07:39 318

原创 POJ 1743 Musical Theme (后缀数组 + 二分)

题意:给你一个数组,求最长重复不重叠子串, 一段子串 如果每个元素加上或减去某个数 也是相同的。思路:虽然每个元素加上或减去某个数也是一样的, 那么这一段相邻的差值是不变的, 那么我们就可以求 差值数组的后缀数组。这样 就可以直接用后缀数组来做了,论文里的例题。二分长度k, 然后给sa 数组进行分块。每一块中height必须都要大于等于k那么每一块中 的最大sa - 最

2017-04-28 17:06:33 473

原创 Educational Codeforces Round 18 -- D. Paths in a Complete Binary Tree(二叉树模拟)

题意:给你一棵完全二叉树, 要求从某个结点出发, 开始行走,可以向上走,向左走,向右走, 模拟这个过程。思路:观察那个二叉树的形状, 直接二分走就可以找到每一个结点。我们先找到那个结点,然后从这个结点进行二分模拟行走, 因为有向上走的情况存在,所以可以开一个栈,来维护所走过的路。#include using namespace std;typedef long long

2017-04-27 21:38:31 412

原创 POJ 2217 Secretary (后缀数组)

题意:求最长公共子串。思路:后缀数组直接将两个串S和T用一个未出现的字符'\0'连接起来。  求后缀数组。当两个sa[i] 属于两个串时,更新lcp[i]最大值即可。#include #include #include #include #include using namespace std;const int maxn = 10000 + 10;in

2017-04-26 22:14:08 430

原创 SPOJ - DISUBSTR (后缀数组)

题意:求一个字符串的不同子串的个数?思路:后缀数组算法:每一个子串都是某一个后缀的前缀,那么问题转换为 求 所有后缀的不同前缀个数。如果按照后缀数组 sa[0],sa[1],sa[2],,,sa[k]访问的话,那么访问sa[k] 便会新加入n - sa[k] + 1个 前缀。这些前缀中 有height[k] 是与前面重复的,减去即可。#include #inclu

2017-04-26 21:39:30 416

原创 团体程序设计天梯赛-练习集 -- L3-016. 二叉搜索树的结构(模拟)

题意:建立搜索二叉树,然后就是一系列询问了。有几个坑:要查询的数值可能不在二叉树上。数值不是1~n的。需要以下标建立二叉树或者 离散化一下。可能是时间紧迫问题,  差了四分 就是没想到 数值可能不在二叉树上了。#include #include #include #include #include #include using namespace std

2017-04-22 22:51:46 974

原创 蓝桥杯 历届试题 网络寻路 (dfs)

题意:统计一棵树上有多少路 只走三次, 起点和终点可以相同,中间的不可以相同。思路:直接暴力枚举起点,dfs即可。#include #include #include #include #include #include #include #include #define Siz(x) (int)x.size()//#define get(x) (3.141592

2017-04-20 21:22:26 794 1

原创 蓝桥杯 历届试题 九宫重排 (八数码问题--康托展开去重 + bfs搜索)

题意:简单的八数码问题:给你两个状态 求最少步数。可以把点变成9:这样,9个数都不一样,相当于是阶乘的排列。直接用bfs 搜索 康托展开去重即可。#include #include #include #include #include #include #include #include #define Siz(x) (int)x.size()#defi

2017-04-20 20:45:13 1635 2

原创 团体程序设计天梯赛-练习集 -- L2-022. 重排链表

用结构体存下当前结点,地址,数值,和next。并且记录地址add1 对应的是哪一个 结构体就好。然后就是瞎模拟了:#include #include #include #include #define Siz(x) (int)x.size()using namespace std;int pos[123456];struct Node{ int add,v,n

2017-04-19 17:38:09 911

原创 Codeforces Round #408 (Div. 2) -- C. Bank Hacking(分类讨论)

题意:给你一个树状图的银行结点, 你要攻击所有的银行, 每个银行有一个权值wi, 攻击这个银行你需要能力值为wi, 你攻击一个银行,那么这个银行相邻的银行的权值+1,间接相邻 的银行权值也加1, 这里的间接相邻指的是: 如果i 和j 间接相邻,那么必然存在一个没被攻击的k 使得i与k 相邻, k 与j 相邻。思路:找找规律便发现:如果从某个结点i 开始 攻击的话,那么和i 直接相邻

2017-04-12 22:17:46 594

原创 Codeforces Round #408 (Div. 2) -- D. Police Stations(bfs)

题意:告诉你一棵树, 告诉你某些结点为警察局, 其余的为普通点 ,  普通点到每个警察局的距离都小于等于d,现在要求删除尽可能多的边,使得每个点到警察局的距离依然小于等于d,输出数量以及哪些边?思路:直接从警察局开始bfs , 访问的不在访问,这样每个访问到的边 就是要保留的边,没访问到的就是要删除的。#include #define Siz(x) (int)x.size()u

2017-04-12 22:08:33 498

原创 The 12th Zhejiang Provincial Collegiate Programming Contest -- 第七场选拔赛

I:Earthstone Keeper题意:给你一个n*m的迷宫,你要从起点走到终点,每个格子有怪兽和夹子和墙,墙不能走,夹子踩上去会受到伤害,但是踩完之后夹子会刷新好, 你走到怪兽旁边,怪兽会对你造成伤害,同样你会杀死怪兽,不会复活。要求路途 受到的伤害最小,伤害相同保证距离最小。思路:本以为是一个搜索,上了类似dijkstra,可能Node 结点里存的太多了 一直TLE.应

2017-04-06 22:47:50 439

原创 2014 Multi-University Training Contest 9 -- 组队选拔赛三

HDU 4965 Fast Matrix Calculation 题意:给你一个n*k的矩阵A,给你一个k*n的矩阵B,C = A*B, 求C^(n*n) 对6取模, 计算结果的元素和?思路:如果直接按照它说的做的话,会在矩阵快速幂种产生一个n*n*n的复杂度。 会t。转换一下:C^(n*n) = (A*B)^(n*n) = A * (B*A)^(n*(n-1)) * B,

2017-04-02 23:41:16 484

原创 HDU 6007 Mr. Panda and Crystal (最短路 + 完全背包)

题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多少钱的水晶?思路:很复杂的一道题目。但是分析后,很简单:整体思路:我们求出每种水晶的最小消耗魔力,那么问题就转换为 求在不超过魔力n 的情况下,让你选择尽可能多水晶来卖更多的钱

2017-04-02 00:39:38 1664

原创 HDU 6005 Pandaland(dijkstra + 剪枝)

题意:给你一个m 个边的无向图,要求在图上找一个最小的环(边权)。思路:好暴力的一道题目。一个环的话 肯定要经过一个边,我们直接暴力枚举哪一个边。把这个边的权值设成inf。然后跑这两个点的最短路即可。加上这个边原权值 即是这个最小环。注意加个剪枝:当优先队列中的最小值大于等于ans 时 直接不跑了#include #include #include #

2017-04-01 18:08:17 1721 1

原创 HDU 6000 Wash (优先队列-贪心)

题意:你有L件衣服, 有n 个洗衣机, m 个烘干机, 告诉你每个洗衣机的洗衣服的时间,和每个烘干机的烘干时间, 每个机器 一个时间段只能处理一件衣服,问洗完这L 件衣服最短时间是多少?思路:贪心。第一步很好想,我们先求出每一件衣服最早的洗好的时间。然后在烘干, 这里因为是最后一件时间尽量少, 因此我们采用最晚的洗好的时间 用第一个烘干机。(最大值加最小值的贪心方式进行贪心)

2017-04-01 11:41:28 2086

原创 POJ 3169 Layout(差分约束_ Bellman-ford)

题意:给你n 只牛。告诉你一些牛的最远距离是多少, 告诉你一些牛的最近距离是多少, 并且 第i 只牛一定在第i-1只牛的右边,求1到n的最远距离, 不存在输出-1, 无限远输出-2;思路:差分约束。我们知道最短路的判断:如果d[e.to] >= d[e.from] + e.dist;那么d[e.to] = d[e.from] + e.dist所以 d[e.to]

2017-03-30 14:32:07 478

原创 Educational Codeforces Round 18 -- C. Divide by Three (贪心)

题意:给你一个大数,长度最大是10w, 要求你删除最小的数字使得这个数不含前导零 并且能整除3.思路:贪心:我们知道  如果一个数 的各个数字之和sum 能整除3 的话,那么这个数就是3 的倍数。我们先判断 sum % 3 是否等于0  等于0 直接输出。不等于0 的话, 假设是x 的话,那么另一个相对的是y (y = 3-x)那么我们可以找到一个数字 他的mod 3

2017-03-29 22:17:41 369

原创 UVA 12003 Array Transformer (分块)

题意:给你n 个数,和m 个操作,m 个操作先查询 [L,R]上比x 小的个数, 在根据这个数 对 某个数进行变换。思路:真的是xjb 操作啊,直接分块怼就行。直接建立一个有序的分块即可。然后就是删除vecror 和插入排序。#include #include #include #include #include using namespace std;typ

2017-03-29 20:33:11 593

原创 UVA 11990 ``Dynamic'' Inversion (分块 )

题意:给你n 个数的排列,和q 个操作,每个操作删除一个数,在删除每个数之前 输出当前的逆序对。思路:动态逆序对一般用分块乱怼一波就好了。建立两个分块,一个存有序的数,另一个是未排序的。删除x的话, 把x 不在的分块直接二分 找 大于x的数 和小于x的数。对于x 在的分块,直接o(sqrt n)查询一下就好。注意有序vector 和无序vector的删除,这里傻笔了,w

2017-03-29 19:27:35 416

原创 团体程序设计天梯赛-练习集 -- L3-014. 周游世界(dijkstra)

题意:给你一些边,每个边都属于一个确定的公司,告诉你q 个询问,每个询问让你输出两点之间的最短路,并且打印解,连续属于一个公司的线路,只打印收尾。思路:这个题赛场上过样例后,只得到了一分。= =其实就是个很水的dijkstra。只不过要求的最通畅路线是 要求节点数最小,节点数相同要求换公司线路最小。这个题wa了好久,原因是 优先队列优先级写反了。我们只需要简单的修改一下

2017-03-29 10:43:21 1503

原创 LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)

题意:给定一个长度为n 的字符串s,求它的每个前缀的最短循环节?思路:我们想一下KMP的next 函数。next[i]表示 由S[0],S[1],,,,S[i] 构成的字符串的最大前缀长度 使得前缀等于后缀。那么这个问题就很好办了。假设当前枚举到i 位置了。(目前字符串的长度是i)假设最短循环节是X。那么next[i] 一定是i - X;所以我们只需要判断i 是

2017-03-28 22:16:44 500

原创 团体程序设计天梯赛-练习集 -- L3-015. 球队“食物链”(状压+dfs 求哈密顿回路)

题意:告诉你n个球队,求一个字典序最小的食物链。头一次听说 足球食物链,相当精彩啊= =。思路:赛场上用普通的dfs 骗了一些分。但是没骗够。 因为有一个细节没挖到。就是A战胜B 不一定是A赢B 也可能是B输给A。可以把问题转换为求一个哈密顿回路:这是一个NP难问题。 可以用状态压缩 + dfs 的方法来做:相当于剪枝。令dp[i][st] 表示第i

2017-03-27 22:10:38 1284 2

原创 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest 组队选拔赛一

Problem C. CodeCoder vs TopForces题意:每个人有两个成绩a和b,告诉你n个人的成绩,A能战胜B的条件是A中a或b能够高于B中对应的a或b,或者A不能直接战胜B,但是A能战胜C,但是C能战胜B,那么A也能战胜B。问你每个人都够打败人的数量?思路:我们先按照成绩a排序,令mx[i]表示第0,1,2,,,i个人中b成绩的最大值,这样的话,最后一个人能够战胜

2017-03-27 00:20:26 1583

原创 团体程序设计天梯赛-练习集 -- L2-018. 多项式A除以B(多项式除法--模拟)

题意:给你两个多项式A和B,求A/B 的商和余数。思路:这个题目 学到了多项式除法 = =,好水。具体看一下百度百科:多项式除法的介绍多项式A/B,循环终止条件就是当A的最大指数小于B的最大指数时,这时A就是余数。否则就一直循环。怎么除呢:我们构造出一个式子来,使得B乘以这个式子能等于A的最大指数的那一项,然后把它消掉,一步一步模拟,直到A的最大指数小于B的

2017-03-26 00:09:09 2364

原创 团体程序设计天梯赛-练习集 -- L2-012. 关于堆的判断(最小堆)

题意:给你n 个数,插入到堆中,给你m 个四种命令,问你是否正确。思路:手写堆push 函数,先建立好堆,因为每个数都是独一无二的,直接统计每个数在堆中的位置,模拟询问即可。就是询问的读入有些麻烦,多写几个if else 特判就好了#include #include #include using namespace std;int n,q;int heap[100

2017-03-24 22:12:40 529

原创 SPOJ DQUERY - D-query(主席树-区间不同数的个数)

大体题意:给你n 个数,给你q个询问,每个询问问你某个区间上不同数的个数是多少?思路:主席树入门题:简单记录一下:这里先建立一个完整的线段树,这里的区间就代表区间了,不再是第几大了,定义的sum 是这个区间上的不同数的个数有几个。因为是主席树嘛,所以肯定要建立n 棵线段树,每个线段树是以每个位置的数为根,比如说该建立第i 个线段树了,如果这个数字之前没有出现过,那么我们

2017-03-23 20:58:56 3982

原创 CCF习题 201703-4 地铁修建(dijkstra 或者 最小生成树)

题意:很水很水的一道题目, 但自己也很水, 没得全分= = ~~~求使得1和n 连通得一条路中最大路权最小值。思路:多个思路:1. 修改dijkstra,把判断距离改成判断 最大路权即可。2. 最小生成树,直接按照最小生成树做,当1和n 连通时就找到答案了,因为这时候肯定是边最小的。迪杰斯特拉版本代码:#include #include #include

2017-03-23 18:15:17 4279 6

原创 对主席树的一点理解 -- 例题POJ 2104

断断续续看了许久的主席树,简单记录一下。什么样的题目用主席树呢,比如POJ 2104 求区间第K大的数是谁?当时做这个题时,感觉分块+二分可以搞,就写了好久,改了好久,始终TLE,还是学学主席树把= =。先吐槽一下线段树:线段树竟然是被一个黄嘉泰的大佬因不会划分树来代替的,,,,,因缩写是HJT取名为主席树= =!orz主席树大体思路:我们怎样求区间第K大数呢:假如我们

2017-03-22 21:50:26 898 2

原创 POJ 3181 Dollar Dayz (有点像背包的dp -- JAVA大数)

题意:给你k种硬币,价值分别为1,2,3,,k,要求问你凑出n 元钱的数量?思路:令dp[i][j] 表示利用前i 种硬币来凑出 j 元钱的数量。那么边界 dp[1][i] 都是1那么dp[i][j+o*i] += dp[i-1][j]j表示用前i-1 种硬币凑出来的价值,o 是利用第i 种硬币的数量。但是n 能到1000,种类能到100,那么这个数量会爆long lo

2017-03-20 12:43:12 483

原创 HDU 1829 A Bug's Life(种类并查集)

题意:给你n 个人,m 个操作, 每个操作告诉你两个人不是一个性别的,问你能否给所有人分成两组不冲突。思路:加权并查集取模变成种类并查集。好不爽,个人赛时竟然花费了一小时在一道简单的种类并查集上,于是就找了几个类似的水一水= =!我们记录每个结点父节点时,在开一个数组a,记录这个结点到根结点的距离。这样 如果一个操作中的两个人在一个连通块时,那么只需要判断它们的距离是否是一

2017-03-19 01:16:00 470

原创 Codeforces Round #254 (Div. 1) -- C. DZY Loves Colors(分块)

题意:给你n 个数,有q 个操作,操作1,使得L到R的区间的a全变成x,b 加上|x-a|。 操作2查询L到R上的b 总和。思路:分块乱搞就好了。我们用flag[i]表示i 这个分块是否是一样的。当前分块如果是完整的话,如果是一样的话,直接更新到答案里,不是的话就暴力一遍。如果不完整的话,在讨论是不是一样的。#include using namespace std

2017-03-17 00:30:21 441

原创 POJ 1704 Georgia and Bob (Nim博弈)

题意:排成直线的格子上有n 个棋子,棋子i 在左数第pi 个格子上,Georgia 和Bob 轮流选择一个棋子向左移动,每次可以移动一格及以上任意多格,但是不允许反超其他的棋子,也不允许将两个棋子放在同一个格子上。无法进行移动的一方失败,假设Georgia 先进行移动,当双方都采取最优策略时,谁会获胜?思路:Nim 博弈:有n 堆石子,每一堆数量告诉你,一方可以从某一堆拿至少一个石

2017-03-16 17:22:50 302

空空如也

空空如也

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

TA关注的人

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