- 博客(50)
- 收藏
- 关注
原创 [bzoj-3155]Preprefix sum 题解
题目传送门 题意解析:题目给了一个a序列,并且定义s为a序列的前缀和,ss为s序列的前缀和,然后有两种操作,一种是查询ss[i]的值,还有一种是修改a[i]。My opinion:明显的数据结构题,但是怎么维护是一个问题,我们列出a,s,ss就会发现一些现象。 a a1 a2 a3 a4 a5 a6 …… an s a1 a1+a2 a1+a2+a3 …… a1+a2+
2017-10-29 15:17:55 299
原创 [bzoj-2140]稳定婚姻 题解
题目传送门 题意解析:题目告诉了我们n对夫妻,和m对情人(???题目就是污),然后假设第i对夫妻有矛盾,那么他们就会离婚去找情人(???),所以最后就可能产生两种情况,一种是,最后一一重新配对,反之有剩余,问对于每对夫妻闹矛盾后的情况是哪一种。My opinion:看到这题目的大小,n<=4000。有深意,而且对于一一对应的匹配,很容易就想到了二分图匹配,但是事实上,点有2n个,所以这样二分图匹配
2017-10-29 14:06:51 380
原创 [luogu-1314]noip2011 day2-T2聪明的质监员 题解
题目传送门 题意解析:题目告诉了你n块矿石,并且每次选取一段矿石,给出了矿石的质量计算方式,让你求出每段质量之和(Y)与要求的质量和(S)的最小差(即求min{abs(Y-S)}),每次计算的方案是,对于一个选定的重量W,每段的质量=重量超过W的个数*重量超过W的价值之和。My opinion:我一开始看到这题目,有一件事是很明显的,如果我们知道了W,那么我们可以快速计算出每一段的质量,(不过像我
2017-10-28 20:56:00 269
原创 [luogu-1007]独木桥 题解
题目传送门 题目给了一个数轴,数轴上有一些点会向两边中的任意一个方向运动,问出数轴的最小和最大的时间。 题目中说,两个点相遇便会掉头走,但是我们可以这样认为,因为两个点的速度是一样的,所以如果两个点相互遇到的话,我们可以将它当做互相不理睬直接穿过对方,那么这题他答案也就出来了,在向左和向右中选择最大/最小的时间。 代码:#include<iostream>#include<cstdio>#
2017-10-28 20:33:21 1255
原创 [51nod-1432]独木舟 题解
题目传送门 题目很简单,明显的贪心,每次如果最大值和最小值可以在同一个独木舟上,那么就在一起,不然最大的自己一个。 注意最后如果只剩下一个的情况。 代码:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define rep(i,a,n) for (int i=a
2017-10-26 20:20:15 251
原创 [bzoj-4832][Lydsy2017年4月月赛]抵制克苏恩 题解
题目传送门 题意解析:题目告诉了我们攻击次数k,和a,b,c三种状态的奴隶主分别的个数,c可以变成b,b可以变成a,a可以直接消失,然后每次当c变成b或b变成a的时候,只要三种总数不到7,那么c的个数就会多出一。当然攻击可以打在人物角色本身。My opinion:这题暴力贼好写,dfs(k,a,b,c,p,s)表示还剩k次攻击,三种状态的人还分别剩下a,b,c个,概率为p,人物被攻击了s次。转移的
2017-10-25 18:11:34 348
原创 [51nod-1428]活动安排问题 题解
题目传送门 好久没写了,刷题的时候看到了这个经典题,就来写一下,我见过的原题叫校门外的树。题意一样,我们只要把一开始的时间的开始和结束节点排个序,然后一遍扫过去,如果是开头就sum++,如果是节点就sum–,然后中途sum的最大值就是答案了。听一些dalao说这叫做差分。 代码:#include<iostream>#include<cstdio>#include<cmath>#includ
2017-10-24 16:41:34 314
原创 [51nod-1563]坐标轴上的最大团
题目传送门 题意解析:题目给了你n个数轴上的点和每个点上的权值,以abs(x[i]-x[j])>=w[i]+w[j]为要求建图,求最大的完全图。My opinion:题目乍一看很迷,可能认为是图论的题目,然而这个条件——abs(x[i]-x[j])>=w[i]+w[j]可以发现一个转换,x[i],w[i]可以看成是一条线段,左右端点分别为x[i]-w[i],x[i]+w[i],然后这个条件就是两条
2017-10-16 14:21:57 281
原创 [hdu-3065]病毒侵袭持续中 题解
题目传送门 (话说最近不知道为啥hdu改名了???所以之前的网址都无效了???) 题意解析:题目就是给了n个模式串,一个匹配串,问你每个模式串在匹配串中出现的次数。都说了最近在做AC自动机的模板题,而且也挺明显的。 还有因为这其实是第一题我做的AC自动机,所以去网上找了模板。 直接上代码:#include<iostream>#include<cstdio>#include<cmath>
2017-10-13 06:53:03 333
原创 [hdu-2896]病毒侵袭 题解
题目传送门 题意解析:似乎题目是中文的,所以就大概说一下,给你n个模式串,和m个匹配串,让你找出分别是哪几个模式串出现了,题目中保证了匹配串中最多出现3个模式串,并且最后让你输出可以匹配的个数。AC自动机的裸题,在危险节点上记录编号就好了。 代码:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#incl
2017-10-13 06:44:55 321
原创 [bzoj-1047][HAOI2007]理想的正方形 题解
题目传送门 题意解析: 题目就是给了你一个n*m的矩形,然后让你找一个正方形,要求这个正方形中的最大值减去最小值的差值最大My opinion:看到这题,也许一开始只会n^4的写法,然后稍作优化也许可以变成n^3logn,然后就一脸不会了,但是其实只要仔细想一想,就会发现原来可以用单调队列做,所以我们可以先预处理出每一排的最大值和最小值,之后我们可以通过每一排的单调队列然后直接计算出答案。 总
2017-10-09 19:33:53 274
原创 [bzoj-1853][Scoi2010]幸运数字 题解
题目传送门题意解析:题目就是给了你一段闭区间[a,b],然后规定数字中只包含6和8的是幸运数字,列如:6,8,66,88,68,66668……问你在这段区间内是这些幸运数字中任意一个的倍数的有几个,当然,如果同时是多个的倍数也算。My opinion:一开始看到数据范围是1到1e10(一百亿),就知道不可能是暴力,明显爆炸,所以一看就要去计算一段区间内的x(x是任意数)的倍数的个数,式子很好推,显然
2017-10-08 08:02:22 441
原创 [bzoj-4557][JLoi2016]侦察守卫 题解
题目传送门 题意解析:题目就是告诉了你一棵树,再告诉你在一个点放置一个覆盖点的代价,然后每在一个点放置覆盖点,离它距离小于等于d的都会被覆盖,问覆盖要求点的最小代价。My opinion:我这题曾经听dalao讲过,然而后来我做的时候还是不会,只是知道这题目是树形dp,所以当场做的时候就翻车了。而且这题是求要求的覆盖点的,而我会的只是覆盖全部的点,后来回去仔细想,才发现覆盖要求点和全部点的区别就是
2017-10-07 20:19:48 327
原创 [bzoj-4808]马 题解
题目传送门 题意解析:题目给了一张图,上面有的地方不能放马(中国象棋里的),问最多能放几只马。……..跟bzoj3175几乎一模一样,包括数据范围,所以详情请见bzoj3175 代码,好像也一样:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep
2017-10-07 07:43:25 785
原创 [bzoj-1607][Usaco2008 Dec]Patting Heads 轻拍牛头 题解
题目传送门 题意解析:题目很明显,给你每一只cow的编号ai,然后问你每只奶牛是它的约数是有几只(不包括自己)。My opinion:我还是小看了数据,一开始以为用O(n√n)可以卡过,没想到bzoj上的总时间只能有3秒,那么只能用O(nlgn)的算法了,那么很明显,对于每个a[i],它对答案的贡献是1,即对每个ans[j] (j%a[i]==0)答案加一,然后我们用类似筛法的写法就可以做到了。
2017-09-29 17:04:45 279
原创 [bzoj-3714][PA2014]Kuglarz 题解
题目传送门 题意解析:题目告诉了你有n个杯子,有个杯子下面有球,查看一段杯子下面球个数的奇偶性需要的花费,最后问你一定能确定球的位置的最小花费。My opinion:一开始看着题目的时候,草率的没有看完整个题目,只看到了一段数的奇偶性,然后我就以为是一道高斯消元,然后就被吓个半死,有种放弃的欲望。然后仔细一看,喵的,求最小花费????那TM的跟高斯消元有半毛钱关系(好吧,是我太愚昧了)。我们可以发
2017-09-29 11:20:44 312
原创 [bzoj-3211]花神游历各国 题解
题目传送门 题意解析:题目就是告诉你n个数,然后有m个询问,每次询问有两个操作,一个是把一段区间内的和输出,一个是把一段区间中的每个数取根号。My opinion:看到这题就应该知道应该用数据结构维护,不过这个根号该怎么办呢?我们都知道,根号让一个数降下来只需要几次就好了,而根号1或者0都不会变的,我算了一下让10^9变成1或0只需要根号5次就好了,所以,我们可以每次暴力根号,如果一段区间已经全部
2017-09-27 12:53:04 395
原创 [bzoj-3709][PA2014]Bohater 题解
题目传送门 题意解析:题目意思是告诉你有n只怪兽和你一开始的血条(这里我用HP表示,相信都懂的),每只怪兽会打掉你的血量,然后在你打死它之后会掉落血瓶让你回血。所以怪兽是先打掉你的血再给你回血(都懂都懂),所以回血和扣血是不同步的。最后问你可不可以打完n只怪兽以及最后的方案数。My opinion:这题目一开始的方法很明显,每个人当然会去选择先打回血比扣血多的,这样才能达到血量最大值去打另外的怪兽
2017-09-26 17:32:29 271
原创 [luogu-3379]【模板】最近公共祖先(LCA) 题解
题目传送门 模板题,没什么好说的。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=a;i>=n;i--)#define C
2017-09-25 16:53:04 231
转载 dalao的tajan模板
lca:最近公共祖先求LCA一般有用倍增的和tarjan的, 倍增的是O(nlogn)的但是可以在线; tarjan是O(n+Q)的但是必须离线。 应当对于不同的题目适当选择。tarjan算法的主要思想……是从要求的一对点的访问过程求来的。 比如以一个点u为根的多个小子树内,不同小子树内的点对的lca都是u。 那么可以dfs下去,回上去的时候用并查集合并整棵子树。看懂网上的或者书上的资料之
2017-09-24 20:02:31 265
转载 一些dalao的模板
费用流(MCMF)这东西很早之前就想写了……但是一直慵懒。 在最大流找增广路的过程中,同时要求了最小费用, 那么我们找的增广路就找费用最小的那一条。一般最小费用流的“费用”形式是:每条边有单位流量的代价。 那么求出了S~T的增广路里,cost最小的一条, 只要用增广的流量乘上这条增广路里每条边的cost即可。 如何找cost最小的一条呢? 用SPFA来寻找最短路。 注意了,费用流建边的
2017-09-24 19:57:13 242
原创 [51nod-1068]Bash游戏 V3 题解
题目传送门 一道很神奇的找规律题,前面几个找出来看看一猜一下。具体为什么我也不知道。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (in
2017-09-24 19:55:02 197
原创 [51nod-1120]机器人走方格V3 题解
题目传送门 对于这题,我只能说,Lucas大法好,还有就是对于求上三角和下三角的方案数,基本跟卡特兰树有关。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,
2017-09-24 18:52:50 248
原创 [51nod-1119]机器人走方格V1 题解
题目传送门 明显答案为C(n-1,n+m-2),不过有一百万所以预处理好了。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=
2017-09-24 18:06:04 233
原创 [51nod-1128]正整数分组V2 题解
题目传送门 题目要求最小值最大,而且分组是连续的,那么就没什么好说的了,二分答案+线扫直接上。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) fo
2017-09-24 15:51:17 304
原创 [51nod-1441]士兵的数字游戏 题解
题目传送门 就是求每个素数因子的个数,然后用前缀和算出答案就好了。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=a;i>=
2017-09-24 15:40:02 286
原创 [bzoj-3713][PA2014]Iloczyn 题解
题目传送门 dalao又跟我说了一题水题。 看完题,都知道斐波那契几项后就特别大,所以只需要预处理出前面几项就好了。 (大约是45项左右,因为40项的时候就已经大于1个亿了)#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#defi
2017-09-17 13:51:06 228
原创 [luogu-2831]noip2016-day2-T3 愤怒的小鸟 题解
题目传送门 题意解析:题目就是跟愤怒的小鸟这个游戏一样,不过就是每只小鸟的抛物线就是ax^2+b,a和b都是自己定义的,然后问你打光所有的猪需要用最小的小鸟数量。My opinion:一开始看到这题只会暴力(包括在比赛的时候)。但是你会发现猪可能会在同一条抛物线上,一下搞死两只,所以一开始你可以预处理出所有在同一条抛物线上的猪,然后你又会发现猪只有18只,妥妥的状压dp嘛,都没什么技术含量(这是一
2017-09-14 21:12:43 283
原创 [luogu-2877]noip2016-day2-T2 蚯蚓 题解
题目传送门 题意解析:题目给了你n条蚯蚓,然后让你每次找出一条长度最长蚯蚓,然后把它切断,而且每次切断的位置都会告诉你(每次切开都是按照一个比例来的)。然后蚯蚓就会向你所知道的一样变成两节(为什么是瞬间恢复的?而且长度为0也是一种特殊的存在,居然还不死)。最后这次砍断结束后,除了这次被砍断的蚯蚓,都会长长q的长度(长得真快)。My opinion:虽然这题有很多的槽点,但是我们还是得去做是不是,因
2017-09-14 20:39:50 280
原创 [luogu-2822]noip2016-day2-T1 组合数问题 题解
题目传送门 题意解析:题目就是给了你一个k,然后还有T组数据,然后问你在i<=n和j<=i的情况下C(i,j)%k==0的个数。My opinion:这题一开始看到是就是满眼的要TLE,不过我知道一个递推公式,可以表示出C(n,m)=C(n-1,m)+C(n-1,m-1)(m>=2,n>=1),这样我们就可以直接预处理出所有的C(n,m),但是我发现,C(2000,1000)会爆掉long lon
2017-09-14 20:37:01 500
原创 [poj-3253]Fence Repair 题解
题目传送门 题意解析:题目就是告诉我们n块木板,每块木板都有一个长度。然后一开始有一块木板,这块木板的长度是n块木板之和,然后每次都要把一块木板锯开,每次的费用就是木板的长度,最后问题得到一开始n块木板的费用最小值。My opinion:一开始看到这题时一脸懵逼的,完全不会,怎么锯?难道dfs,因为你不知道这块木板该锯成什么大小。又想了一会,突然发现这题跟合并果子差不多,只不过这题时倒着来的,我们
2017-09-10 21:13:12 366
原创 [hdu-4006]The kth great number 题解
题目传送门 题意解析:题目就是有n次操作,每次操作可以加入一个数或者查询,查询是查找在队伍里的第k大的数(k是一开始就给你的,每个测试数据k都是固定的)。My opinion:这题目一开始拿到时,看到n<=1000000和有多组测试数据着实吓了我一跳,我都怕输入超时了。感觉可以维护一个优先队列,但是又觉得十分麻烦,于是决定弄一个很暴力的方法。可以使用堆,每次维护一个只存在k个数的小根堆,每次加入一
2017-09-10 20:13:31 468 2
原创 [bzoj-2049][Sdoi2008]Cave 洞穴勘测 题解
题目传送门 这题就是一个dalao告诉我的lct裸题,用来练习模板,然而一次都没写过的我果断去看了hzw学长的代码,以此为模板练练手(然而还是不是很会写) 代码:#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#define rep(
2017-09-10 19:09:34 215
原创 [bzoj-5018][Snoi2017]英雄联盟 题解
题目传送门 题意解析:题目有点像背包,就是给了你n个物品,每个物品有个价格和数量,然后问你在方案数>=m的情况下的最小花费。(方案数是显而易见的每种物品选取的数量之积)My opinion:题目很明显是一题类似背包的问题,所以当然是 dfs dp了。一开始想到的状态就是f[i][j]表示前i个物品,方案数是j的最小花费,可是这样的话,因为方案数太大,有10^17,先不说MLE,还有TLE。所以我们
2017-09-10 17:18:08 533
原创 [bzoj-1064] [Noi2008]假面舞会 题解
题目传送门 题意解析:题目给了你一个有限图,让你给这张图一次染色,每种色彩有种编号,每个点指向的点的颜色编号(设这个点的编号为i)应该是i+1(当色彩有m种,当前i=m时,指向的点的色彩编号应该为1)。最后问色彩的种类最多和最少是多少(最后的色彩数应该>=3)。My opinion:开始只会强行暴力染色,然后想了想可不可以二分色彩数,然后判读,却发现如果x可以,但是x+1不一定可以(手动绝望)。然
2017-09-10 16:00:03 404
原创 [luogu-1850]noip2016day1-T3 换教室 题解
题目传送门 题意解析:题目就是给了你相对应的2n个教室,m次换的机会。对于每一次去教师上课,你都可以申请或者不申请换教室,换的话就会浪费一次机会,当然每次换都有成功或者不成功的概率。然后题目一开始就告诉你了,每次你在哪个教室上课,还有换的话去哪个教师,以及每次的成功概率,还有每两个教室之间的距离。最后求最小的期望,每次期望就是路径长度乘以概率。My opinion:一开始在比赛看到这题………………
2017-09-09 14:23:50 1094
原创 [luogu-1563]noip2016day1-T1 玩具谜题 题解
题目传送门 题意解析:题目就是给了你n个人组成的一个环,然后从第一个人开始移动的方案,让你找出最后到达的位置。My opinion:看到题就知道是模拟,明显。(当然也是我noip唯一会做的题)这只不过是怎么来的问题罢了。总结: 直接模拟便可。有一种简洁的方式不用这么多的if语句。 你可以发现如果一个人朝向是向外的,他的左右是相反的(废话,题目里都说了) 所以左右和朝向分别用0,1表示,如果左
2017-09-09 10:24:22 423
原创 [bzoj-3175][Tjoi2013]攻击装置 题解
题目传送门 题意解析:题目就是给了你一张n*n的图,在图上有的点可以放棋子,有的不可以,这里的棋子跟马一样走“日”,然后问你最多能放几个互不攻击的马。My opinion:看到这种不能互相攻击的题,暴力点可以用dfs,但是这里n<=200,所以当然是用dfs二分图匹配了,建图十分明显,只要按与一个点能攻击到的所有点连一条边,然后跑二分图匹配就行了。最后的匹配数就是不可以放棋子的点数。但是这里有一个
2017-09-04 19:26:36 274
原创 [bzoj-1293][SCOI2009]生日礼物 题解
题目传送门 (这又是一位dalao告诉我的水题) 这题明显是一道线扫题,只要排序一下,在全部存在的情况下找出最小的答案就行了。 直接上代码:#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#define rep(i,a,n) for (
2017-09-03 20:30:06 247
原创 [bzoj-2761][JLOI2011]不重复数字 题解
题目传送门 这题就是去重,因为数字太大不能使用基数排序。 所以,我们可以使用快排,在排序的同时记录开始读入的时候的序号,最后去完重复之后用这个序号还原原来的序列。 (又是dalao提供的水题) 代码:#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#includ
2017-09-03 19:29:54 251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人