BZOJ
Hanks_o
一名。
展开
-
bzoj1031: [JSOI2007]字符加密Cipher(后缀数组)
题目传送门 题目挺不错的。 赤果果的后缀数组啊。 我好像只会后缀数组作后缀排名了。 真的菜。(我要变强!!)因为他的字符串排成了一圈了。所以说我们应该长度为两倍才行。 比如: abcd。 那么就会有四个串。 abcd,bcda,cdab,dabc。 这样很容易就可以看出我们应该把字符串变成: abcdabc。 这样的话我们就会有这四个串了。那么拿新的字符串去跑一遍后缀数组。原创 2017-09-24 15:35:29 · 250 阅读 · 0 评论 -
bzoj1002: [FJOI2007]轮状病毒
题目传送门 神题。 听说要用基尔霍夫矩阵了。 然而我并不知道那是什么东西。 看了看。膜了一发神牛。 真的强 然后上高精度。。代码实现:#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>#include<algorithm>using namespace std;struct node {原创 2017-09-24 16:19:37 · 343 阅读 · 0 评论 -
bzoj1088: [SCOI2005]扫雷Mine
题目传送门 哈哈哈我扫雷很强。 初级6秒中级35秒高级125秒。 欢迎来破。(我感觉还可以了)言归正传。其实说我一眼就看出来怎么做了。 这是作为一个雷手的素质。。首先,当我们确定了前两个格子后,那么我们根据第二个格子的数字就可以确定第三个格子是雷还是空地了。 然后根据第二个和第三个格子,又可以确定第四个格子是什么了。那么前两个格子有多少种情况呢。 如果第一个数字为1。 那么表示前两个格原创 2017-09-25 13:23:27 · 395 阅读 · 2 评论 -
bzoj1191: [HNOI2006]超级英雄Hero(二分图匹配)
题目传送门 这道题唯一的好处就是提醒我们仔细读题。。。。一眼看出二分图匹配。 心里很开心以为碰到了一道水题。 水了一发结果错了。 错了很久。哈哈哈。。 无奈上网看看题解。 发现一找不到答案的话就要break。 然后又回去仔细读了一遍题,发现错一题就不能继续了。 哈哈哈[苦逼]就是二分图匹配了。。 没什么好说的。代码实现:#include<cstdio>#include<cstri原创 2017-09-25 20:50:36 · 361 阅读 · 0 评论 -
bzoj1095: [ZJOI2007]Hide 捉迷藏(动态点分治+树上ST表)
题目传送门 这道题跟我之前做的Qtree4几乎是一样的。 都是神题。 其实我很想膜一下出题人的。 太强了。详细解法还是看我的博客吧。 再写要写死人了。 Qtree4博客 不会动态点分治的话还是一定要看我这篇博客的(毕竟我写的很辛苦。)这道题与Qtree4唯一的不同就是边权为1。 每次dep+1就好。代码实现(Qtree4代码改的):#include<set>#include<map原创 2017-09-25 20:15:05 · 502 阅读 · 0 评论 -
bzoj1059: [ZJOI2007]矩阵游戏(二分图匹配)
题目传送门 好题。 让我加深了对二分图匹配的理解。首先他让我们最后变成对角线。。 这道题我一开始在yy有什么巧妙之处。 我yy到: 如果同一列上面有两个点的话。 那么不管怎么操作也不会使得他们不在同一列。 同一行也是这个道理。 也就是说原本同一列的到最后还是同一列。 原本同一行的到最后还是同一行。 那么不同列不同行的最后也不会到同一行或者是同一列。 哦哦哦。 那这样就好办了。原创 2017-09-25 13:46:44 · 339 阅读 · 0 评论 -
bzoj1015: [JSOI2008]星球大战starwar(并查集)
题目传送门 这道题挺不错的吧。 开始我想按顺序去模拟。 用并查集来维护联通块(因为是双向边) 结果发现每删掉一个点后好难搞。 时间复杂度大概是O(n*m)吧。想了想,倒推不就好了嘛。 倒推的话用一个数组标记这个点现在可不可以用。 那么每次进来一个点我只要遍历和他相连的边就好了嘛。一开始所有点都没有连边。那么联通块的个数为n(所有点的个数)-K(删除点的个数) 然后逐个去连边。如果能连原创 2017-09-18 13:08:39 · 566 阅读 · 0 评论 -
bzoj1051: [HAOI2006]受欢迎的牛(强联通)
题目传送门 这道题真是一道好题。 好久没敲强联通了。好在我还记得scy大佬生动的讲课内容。 最后还是yy出来了强联通居然没错。真的感动!这道题很明显都是单向边。 那么缩点显而易见。 缩点之后每个团体里面的点都会互相认为受欢迎。对吧! 那么怎么能让所有的人都认为受欢迎呢。 我们用出度表示一个团体有多少条边连出去。 用入度表示一个团体有多少条边连进来。 那么当一个团体出度=0时。 也原创 2017-09-17 16:11:50 · 326 阅读 · 0 评论 -
bzoj1026: [SCOI2009]windy数(Dp)
题目传送门 我以前好像做过这道题。 很明显数据范围已经透露了做法。。 最朴素做法O(n*m)。n是个数,m是位数。 必定超时咯。其实我并不知道这题是不是Dp,只是一个预处理的小Dp而已。 用f[i][j]表示一共i位数,最高位填j。小于等于这个数的合法方案数 方程就太好转移了。不详细说明了。for(int i=2;i<=20;i++) for(int j=0;j<=9;j原创 2017-09-17 15:12:40 · 346 阅读 · 0 评论 -
bzoj1008: [HNOI2008]越狱(快速幂)
题目传送门 看了数据范围马上想到组合了。。 一开始想直接求方案发现不行。 直接求方案的话应该要容斥原理去重。麻烦! 直接求方案不行就用总方案数-不会越狱的方案数不就完了咯。总方案数貌似挺好求。 n个格子。每个格子m种选择。 那就是m的n次方。 因为n有点大。快速幂咯。 解决!不会越狱的方案数。 第一个格子有m种选择。 那么第二种格子为了不跟第一个格子相同,所以有m-1种选择。原创 2017-09-17 14:33:56 · 412 阅读 · 0 评论 -
bzoj1012: [JSOI2008]最大数maxnumber(线段树)
题目传送门 这道题是线段树的一个重要的题型吧(并不清楚重不重要) 要求最后L个数的最大值并不难。 但是他的数是一个一个插进来的。 第一次遇到这种问题可能会蒙蔽。。首先先建一棵空树就行了。 每次插入的数就相当于在那个位置修改一下值就行。 然后求一求最大值。。#include<cstdio>#include<cstring>#include<cstdlib>#include<iostr原创 2017-09-16 15:03:18 · 334 阅读 · 0 评论 -
bzoj1036: [ZJOI2008]树的统计Count(树链剖分)
题目传送门 树链剖分模板吧。 不过用LCA好像也是可以的。(表示懒得用)树链剖分: dep[x]:表示x的深度,深度越大离根越远。 fa[x]:表示x的父亲节点。 tot[x]:表示以x为根的子树的家族数量。 son[x]:x的重儿子,选取家族数量最多的子节点作为重儿子。 每一个节点连接自己的重儿子,那么就会出现链,称为重链。 对于同一原创 2017-09-16 10:12:42 · 458 阅读 · 0 评论 -
bzoj1003: [ZJOI2006]物流运输(最短路+Dp)
题目传送门 首先这道题肯定有连续几天的航行是一样的。 那么我们不用去求出每天的方案。 只需求出每一段(连续的几天)的最短路然后*天数即可。不难想到Dp。 用f[i]表示前i天的最小花费。 那么方程很容易就转化为: f[i]=min(f[i],f[j]+spfa(j+1,i)+K); 方程表示的是前j天的最小花费+第(j+1)天到第i天用同一种方案的花费+修改一次方案的花费。 还是比较原创 2017-09-16 09:34:17 · 402 阅读 · 0 评论 -
bzoj1001: [BeiJing2006]狼抓兔子(最大流)
题目传送门解法: 每一只兔子就需要一只狼。 那么我们只需要求出最多能通过多少只兔子即可。 然后就派多少只狼就行了呗。。 因为兔子从哪里过来的我就在哪里放狼。 所以狼的数量一定等于最多兔子通过的数量 题目并不要求求方案,所以不需知道兔子从哪过来。所以直接建边跑最大流就OK了。 注:因为是双向边所以反向边流量等于正向边流量。代码实现:#include<cstdio>#include<cs原创 2017-09-16 09:06:37 · 416 阅读 · 0 评论 -
bzoj1189: [HNOI2007]紧急疏散evacuate(二分+最大流+宽搜)
题目传送门 这道题真的是一道好题啊!!!! 表示做了两个小时。。 bzoj的数据是真的强(pi)。一开始yy了个图结果发现错了。 上网看了看题解。按照构图敲了个代码。 错了!!! 听说被一组神数据卡掉了。 数据如下。 4 5 XXDXX XX.XX X…X XXDXX 按照题解的方法跑出来答案是2但是手算是3。 很无语,只好自己yy了。。 所以想到了拆点。建图是这样的:原创 2017-09-16 14:32:01 · 524 阅读 · 0 评论 -
bzoj1196: [HNOI2006]公路修建问题(最小生成树)
题目传送门 这道题。。 有意思。。最大值尽量小吗? 通常我看到这种问题一般都会去想一下二分旳。。 二分枚举一下最大值。 然后小于最大值旳可以建,建树后看一下能不能建k条一级边,剩下二级边即可。然而。。 要选k条一级边诶。。 如果能选一级边旳话为了花费尽量小那么肯定选二级啦。然后我就想: 我直接把k条一级边选出来再把剩下的边全部选二级不就好了吗。 yy一下好像没啥问题。 打吧!代码原创 2017-09-26 19:31:09 · 547 阅读 · 0 评论 -
bzoj1103: [POI2007]大都市meg(树链剖分)
题目传送门 模板题吧。 没学过树链剖分看这里这道题大概也差不多。 因为这道题是维护边的权(是土路值为1,公路值为0) 求得就是某一个点到1的边权和。 那么我们要把边的值赋值到点上如何做呢? 就把每条边的权值赋值到下面的点上。 代码里面有详细解释。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iost原创 2017-09-27 13:39:04 · 363 阅读 · 0 评论 -
bzoj1070: [SCOI2007]修车(最小费用最大流)
题目传送门 继续膜一发费用流。 考构图的神题。 然而我审错题了读入的时候m,n读反了,WA了半天美滋滋。。解法: 一个技术员可能修多辆车。 那么他每修一辆车只能对后面需要修的车产生影响。 然而我们并不知道某技术员修多少辆车。 所以我们采用倒数。 那么这个技术员倒数修的车是谁就会对后面的车都有影响(包括自己) 那么就差点咯。 一个技术员最多修n辆车。所以每个技术员拆成n个点。 第原创 2017-10-07 10:25:16 · 278 阅读 · 0 评论 -
bzoj3048: [Usaco2013 Jan]Cow Lineup(单调队列)
题目传送门 啥话都不想说快排的判断写错了!!解法: 题目要求连续的一段最长(大概是这样) 其实就是要求原序列中最长的一段。使得里面的数不超过K+1种。 比如: K=2 也就是要删除两种数。 现在有个区间为555552 有一个区间为555521。 很显然上面那个更优。 但是我们要求在原序列里最长。 所以肯定会有一段为 555552?或者?555552 使得不超过三种数。然后就用原创 2017-10-18 08:38:05 · 361 阅读 · 0 评论 -
bzoj1711: [Usaco2007 Open]Dining吃饭(网络流)
题目传送门 真是吃屎了漏了一个细节。解法: 想了一会儿怎么表示一头牛又吃了饮料又喝了食物呢。 很简单。牛放在中间不就完了。 左边食物右边饮料,流量都为1。 食物连向牛,牛连向饮料,这样就能表示啦。 哈哈又切一题。开心的码代码。 错了! 想了半天发现一头牛可能吃了两份东西。。那样的话流量就会为2了。。 流量为2肯定有两个食物各给了流量。 那么我们就需要限制每头牛只吃一个食物,所以每原创 2017-10-18 09:18:30 · 366 阅读 · 0 评论 -
bzoj1087: [SCOI2005]互不侵犯King(状态压缩+Dp)
题目传送门 好久之前学的状态压缩现在都差不多忘了。。解法: 硬搞的话应该很难吧。 所以用状态压缩来优化一下咯。 因为一行最多才9个点。每个点要么没要么有。 那么每一行最多有2^9种状态。 用1表示有国王,用0表示没国王。 这样我们就可以用二进制来表示每一行的状态。那么怎么判断每一行的状态合不合法呢? 每个国王左右都是不能有国王的。 也就是每个1左右都不能有1。 那么我把整个状态往原创 2017-10-09 14:48:14 · 283 阅读 · 0 评论 -
bzoj2190: [SDOI2008]仪仗队(欧拉函数)
题目传送门 基础太弱导致我现在才去学欧拉函数。解法: 欧拉函数就是求小于等于x且与x互质的数的个数。 先把左下角换到左上角(等效) 把1,1看做原点。 斜率相同的点中只有一个点能看到。 斜率为(x-1)/(y-1) 那么只有互质的时候才是离原点最近的点。 所以我们就要求与每一个x-1互质个个数。 所以筛phi。然后求出ans=1~n-1的phi(欧拉函数) 然后因为欧拉函数求得是原创 2017-10-27 08:40:33 · 281 阅读 · 0 评论 -
bzoj2456: mode
题目传送门 这道题真的恶心。跟我理解的众数完全不一样。。导致我完全忽略了出现次数大于n/2这个条件。。解法: 以为很水打了个代码交上去0msTLE真的舒服。 看了看讨论原来这个是MLE。 那就是不能开数组咯。。 不会啊(忽略了次数大于一半) 然后上网%题解。 发现哦原来还有这个条件。 那众数和不是众数的相互抵消。代码实现:#include<cstdio>#include<cstri原创 2017-10-27 09:55:04 · 257 阅读 · 0 评论 -
bzoj2463: [中山市选2009]谁能赢呢?
题目传送门 这道题就是道结论题,以前一场考试中考过。我记得我当时是这么yy的: 最后走完之后肯定是一个中间没有空间的块。 如果有空间肯定可以继续走。 然后因为他们两个人都很聪明,所以肯定都能提前知道这个情况。 那么输的那个人就会想办法扩大这个块使得他能赢。 两个人都这么想,最后肯定走完整个图,所以判断一下n的奇偶性就行了呀。代码实现:#include<cstdio>#include<c原创 2017-10-27 10:06:22 · 245 阅读 · 0 评论 -
bzoj1143: [CTSC2008]祭祀river(二分图匹配)
题目传送门 题面有点坑(对于我这种不读题面的人来说) 题面上有个大大的图。我看了一下好像是环诶。 我就以为这题有环。 一开始 我想: 既然有环,那么我用强联通缩点之后每个环最多只能选出一个点咯。 然后我再在剩下的点里面求点集,使两两不能互相到达。然后我看错了: 题目说显然,水系中不会有环流(下图描述一个环流的例子) 微笑。然而这道题是裸的最大独立集。 学(mo)了一发。 师兄b原创 2017-10-11 08:49:06 · 440 阅读 · 0 评论 -
bzoj3240: [Noi2013]矩阵游戏(矩阵乘法+快速幂)
题目传送门 费马小定理是什么鬼。。解法: 这道题其实就是把n行的数排成一行。 后面的数由前面的数得到。 用矩乘啊。 加个快速幂呗。 看了下数据范围。。。 n*m有10^2000000,快速幂怎么也得一千万啊,加个高精度除2,炸炸炸。 问了一下lxj大佬。 大佬说:用费马小定理啊! 怒查一波费马,还有这种操作?! a^(p-1) mod p=1 题目都要mod 1,000...原创 2017-10-27 16:19:28 · 396 阅读 · 0 评论 -
bzoj2818: Gcd(欧拉函数)
题目传送门 其实我早就看到这道题了只不过不会做。 结果今天上午我学了欧拉函数。 所以又一次看到这道题就把它做了。解法: 对于每一个质数p,gcd(x,y)=p 我们将x和y都除以p,那么他们的gcd就等于1了。 所以枚举每一个质数,将n除以p。 这就转化为了在n/p中求互质的对数。上午学的欧拉函数就派上用场了。 phi[x]表示小于等于x且跟x互质的数的个数。 那么n/p中互质的对原创 2017-10-27 16:27:42 · 631 阅读 · 0 评论 -
bzoj1050: [HAOI2006]旅行comf(最小生成树)
题目传送门 想了一个多小时就想到一个暴力,结果还真是。。解法: 先判断st和ed连不连通,不连通就IMPOSSIBLE。 最小生成树可以做。 先按照边权从小到大排序。 然后枚举每条边,以当前这条边作为最小的边,添加比它大的边。 如果添加的边可以使得st和ed连通,那么维护一下答案。 那如果最大的边不一定是st到ed这条路径上面的边怎么办呢。 对于每一条边,添加完之后马上判断st和ed原创 2017-10-27 21:30:53 · 412 阅读 · 0 评论 -
bzoj1293: [SCOI2009]生日礼物(堆)
题目传送门解法: 坐在颓凳上吹了半个小时空调想出来的。 这道题不就是每一行数选一个数,然后使得最大值-最小值尽量小咯。因为头尾的彩珠不可能是同一种嘛。如果是同一种的话那我还可以缩减长度啊。 所以每一种彩珠只有一个点参加头尾的比较。 所以说每一行只用选出一个点就够了其他的点不用管。。然后怎么选我就不会做了。 请教师兄: 师兄跟我说枚举开头或者结尾。 然后每一行找刚刚好比他大的,用单调队列原创 2017-10-11 14:24:52 · 302 阅读 · 0 评论 -
bzoj1207: [HNOI2004]打鼹鼠(Dp)
题目传送门 好水的一道Dp。 水一发。。解法: f[i]表示前i个鼹鼠,第i个要打,最多可以打多少只。 状态继承就很简单。 如果曼哈顿距离<=他们的时间差的话就可以继承咯。最后要所有的f求一遍最大值才行。 因为我们的状态表示是第i个一定要打。但是我们也可能不打。所以所有的f都要求一遍最大值。代码实现:#include<cstdio>#include<cstring>#include<原创 2017-10-11 14:29:09 · 414 阅读 · 0 评论 -
bzoj1208: [HNOI2004]宠物收养所(伸展树)
题目传送门 我好弱啊我连伸展树模版都打错。解法: 来一个人就领走宠物。 来一个宠物就被人领走。 那么树上某一个时刻要么全部都是人要么全部都是宠物。。 所以我们放心的求值就可以了。没学过伸展树的自己去学吧。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorith原创 2017-10-11 14:32:33 · 335 阅读 · 0 评论 -
bzoj1202: [HNOI2005]狡猾的商人(带权并查集)
题目传送门 这道题我只想说“还有这种操作?!” 学了一发带权并查集。 真的强!解法: 用带权并查集维护前缀和。 fa[i]跟原来并查集的定义一样。 sum[i]表示i到fa[i]这条链的全值和。 比如 1 2 3 4 5 i=5,fa[i]=2 那么sum[i]=14带权并查集:int sum[110],fa[110];int findfa(int x) { if(x!原创 2017-10-06 09:55:15 · 441 阅读 · 0 评论 -
bzoj1061: [Noi2008]志愿者招募(最小费用最大流)
题目传送门 这题真是神。 让我学了一种很神的建模方式。。 突然感觉以前的费用流好辣鸡啊。 好神。。解法: 扣一发题解: 膜拜dalao真的强。代码实现://弱弱的膜题解#include<cstdio>#include<iostream>#include<cstdlib>#include<algorithm>#include<cstring>using namespace st原创 2017-10-06 15:54:27 · 381 阅读 · 0 评论 -
bzoj1044: [HAOI2008]木棍分割(二分+单调队列)
题目传送门 跑了3s那些200ms的是怎么跑出来的。。解法: 第一问蛮简单。以前大概做过这种类型的题。。 就二分一下最长的那一段的长度。 然后O(n)判断一下。第二问不简单。。 求方案诶。 我以前拿60分的时候打的是Dp。。 f[i][j]表示前i个分成j段切最长长度不大于第一问的答案的方案数。 那么继承就为f[k][j-1],k为上一段的结尾且满足k到i这一段木棍长度小于第一问的答原创 2017-10-12 08:21:03 · 423 阅读 · 0 评论 -
bzoj1432: [ZJOI2009]Function
题目传送门 真的恶心这道题真是毒瘤。 tg这个人整天推荐毒瘤题。解法: 差点就连题目都看不懂了。%题解啊太垃圾了。 挺谢谢博主的 写的不错。代码实现:#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm> #include<iostream>using namespace std;int mai原创 2017-10-20 21:44:21 · 344 阅读 · 0 评论 -
bzoj 3477: [Usaco2014 Mar]Sabotage luogu 【P2115】 [USACO14MAR]破坏Sabotage(二分)
题目传送门 好题啊卡精度真的不厚道。 卡了一个小时。。解法: 首先二分答案!!答案是平均值哦。 然后每个数都减去平均值,这是平均值的经典解法。 然后求最大子段和,因为我们要对剩下的数构成最大影响。 那么选的数就要尽量大。 所以我们求出最大子段和,然后看一下剩下数的和是否<=0。 因为: 如果==0的话,那么说明这个答案是可行的。 如果<0的话,说明正确答案比这个答案还要小,所以先原创 2017-10-13 15:46:30 · 468 阅读 · 0 评论 -
bzoj1650: [Usaco2006 Dec]River Hopscotch 跳石子 luogu【P2678】 跳石头 (二分)
题目传送门 师兄叫我们刷usaco。 我为了骗访问量到luogu找到了原题哈哈哈。 我可以发blog了。解法: 玄学的二分啊。 我的方法跟大多数人都不同。 我先二分答案。 然后距离上一个保留石头大于等于这个答案的石头我都应该保存下来。 然后看一下保存下来的石头是否<=n-m不就完了吗? 错! 不可以等于这个答案。 为什么? 比如四个石头。 4,8,12,16。 如果我现在原创 2017-10-13 15:13:19 · 440 阅读 · 0 评论 -
bzoj5071: [Lydsy十月月赛]小A的数字
题目传送门 巨难受。不知道被谁怂恿去打月赛。 被虐了。解法: 真的垃圾。当时我也想到前缀和了。 只不过我推错了。 A[i-1]+A[i],-A[i],A[i+1]+A[i]。 我当时是这么想的。 A[i-1]加了一个A[i] A[i+1]加了一个A[i] -A[i]减了一个A[i] 那一共加了一个A[i] 那么这个前缀和是变化的。是动态的。那我就不能用前缀和了!!! 所以签到原创 2017-10-29 11:16:16 · 472 阅读 · 0 评论 -
bzoj2152: 聪聪可可(点分治)
题目传送门 哇有意思。解法: 这道题做了两天了。。 贼难受。。 因为这道题不可能n方枚举。 但是一旦确定了最近公共祖先之后。 只用枚举整一棵的点就行了(因为他肯定经过最近公共祖先嘛) 但是每个点都有可能作为最近公共祖先呀。 所以我们就希望对于每个最近公共祖先,它整一棵树的节点数尽量少咯。 点分治嘛,让他分得更平均。 不会点分治可以看这里那么在确定最近公共祖先之后怎么做呢。 枚举原创 2017-10-29 15:41:04 · 338 阅读 · 0 评论 -
1968: [Ahoi2005]COMMON 约数研究
题目传送门 这道题是给我水经验的么。解法: 看到题面有数学公式还以为是道大难题。。 结果。。 读完题后就是1~N每个数都作为因子一共出现多少次。。 就是n/i的和呗。代码实现:#include<cstdio>#include<cstring>using namespace std;int main() { int n;scanf("%d",&n);int ans=0;原创 2017-10-29 16:06:36 · 338 阅读 · 0 评论