自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qwb的博客

ACing

  • 博客(372)
  • 资源 (6)
  • 收藏
  • 关注

原创 构造 Codeforces605B Lazy Student

传送门:点击打开链接题意:一个图n个点m条边,m条边里有n-1条边是一个最小生成树的边,另外n-m+1不是最小生成树的边。边的长度已经告诉你,问能否构造出满足这个最小生成树的图出来思路:构造一颗深度为2的树,根节点为n,然后有n-1条边,并且构造边的时候把是最小生成树的边和不是的边分开统计,分开按照长度排序对于一条边不属于最小生成树,如果这条边的端点是(u,v),那么要求这条边的权值大

2015-12-10 18:22:19 949

原创 nim博弈 Codeforces603C Lieges of Legendre

传送门:点击打开链接题意:N堆石子,轮流取石子,先取完的胜利。取石子的方法有两种。1.在某一堆中取1个2.如果某一堆里的石子个数为偶数(2*x),可以拆成k堆石子,每堆石子x个思路:对k的奇偶性讨论,然后再打出SG函数表,很容易就能找到规律,再把规律写出来就做完了#include#include#include#include#include#include#inc

2015-12-10 18:13:41 816

原创 倍增法LCA hdu2586 How far away ?

传送门:点击打开链接题意:给你一棵树,每条边有权值,求两点之间的最短距离思路:裸LCA。这里主要练习一下倍增法,感觉这种思路和代码实现很简单,而且能感觉实用性很大的,很值得学习倍增法要理解对2的次方的枚举顺序如果是要走固定步数,那么顺序枚举与i位与为1就行如果是要求一个临界位置,那么要从大到小枚举#include#include#include#include#

2015-12-08 20:46:08 1453

原创 树型dp hdu5593 ZYB's Tree

传送门:点击打开链接题意:告诉你如何构造一颗树,然后询问有多少点对的距离小于等于K(K思路:用csy的话来说,这就是个傻逼题,然而比赛的时候就是傻逼不会- -设dp[u][k]表示当节点u作为子树的根节点时,在这个子树中有多少点对与u的距离那么ans[u]=dp[u][k]+sigma(dp[v][k-i]-dp[vlast][k-i-1]) 1其实就是说,如果选u作为一个点对

2015-12-06 03:04:13 1010

原创 平衡堆+贪心 hdu1588 合并果子

传送门:点击打开链接题意:贪心任意石子合并思路:平衡堆的模板和代码测试#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define fuck(x) cout<<"["<<x<<"]"

2015-12-03 19:15:16 1155

原创 树链剖分+线段树 poj2763 Housewife Wind

传送门:点击打开链接题意:2种操作,一种路径上的值统一修改,一种是询问路径上数字连续区间个数。思路:树链剖分+线段树合并。这道题目主要就是难在用树链剖分上套线段树合并后,因为整条链被分成了很多条短的,把这些短的也要按照顺序合并。又因为其实是从左边和右边链的最底端向上执行的,所以应该把左右的分开,然后就是更接近根节点的点是区间的左区间,远离的点是右区间。主要的问题就在于路径上的合并,

2015-12-03 14:36:03 812

原创 树链剖分+线段树 poj3237 Tree

传送门:点击打开链接题意:3种操作,1单点更新,2路径正负反转,3路径查询最大值思路:线段树维护最大值和最小值和一个懒惰标记,然后在线段树的基础上用树链剖分维护#include#include#include#include#include#include#include#include#include#include#include#include#inclu

2015-12-02 23:57:47 769

原创 树链剖分+线段树 hdu3966 Aragorn's Story

传送门:点击打开链接题意:路径更新,单点查询思路:线段树+树链剖分,这里其实不需要懒惰标记也是可以做的#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define fuck(x) c

2015-12-02 23:55:16 868

原创 树链剖分+线段树 bzoj1036 树的统计Count

传送门:点击打开链接题意:节点更新,路径求最大值以及求和。思路:树链剖分,要注意单点更新和边更新的区别。然后就是在建线段树的时候,应该是用重新编号的新编号去建立的,刚开始一直没注意这个地方,然后调bug也调不出来,后来看了好久才看出来,以后还真要注意一下。#include#define fuck(x) cout<<"["<<x<<"]"#define FIN freopen("in

2015-12-02 19:53:39 766

原创 树链剖分+线段树 spoj375 Query on a tree

传送门:点击打开链接题意:边更新,路径查询边权最大值思路:第一道树链剖分题,其实树链剖分就相当于把树的边给分类了一样,分成了重边和轻边。然后,有一个性质,重链的条数和轻边的条数都不会超过log(n),所以总的复杂也只有log(n)也就是说,本身要维护一个路径上的某个东西,如果直接用线段树做,并不是很好做,树链剖分就相当于把重链和轻边分开求,因为重链在DFS序下编号是可以连在一起

2015-12-02 16:29:05 735

原创 数论 Codeforces604D Moodular Arithmetic

传送门:点击打开链接题意:告诉你p和k,其中(0思路:首先这个怎么看都跟循环节有关。。那么怎么找到循环节呢。。首先找k为0的情况,可以发现此时答案就是p^(p-1)然后k为1的情况,答案就是p^p如果k>=2很明显可以发现f(0)=0是肯定的假设k^r%p=1,r是最小满足这个条件的正整数那么f(x),因为f(x)在[0,p-1]内,所以f(x)

2015-12-02 10:45:34 992

原创 树的最小表示法 poj1635 Subway tree systems

传送门:点击打开链接题意:有根树,0表示远离根节点,1表示接近根节点,一条边只访问一次。现在告诉你两种访问方式,问这两棵树是否同构异形。思路:从下向上把子树排序,这样向上,最后表示出来的就是最小表示的了,那么就有序了,就可以直接比较字符串就能判断两棵树是否相同。#include#include#include#include#include#include#include

2015-12-01 16:16:48 1992

原创 BFS预处理 hihoCoder1251 Today Is a Rainy Day

传送门:点击打开链接题意:给你两串序列,长度最长为110,只由1~6组成。现在要把S2串变成S1串。有两种操作,每种操作执行一次代价都是1操作1,把某一个数字变成另一个数字操作2,把某一种数字变成另一个数字求最小代价思路:当时现场赛的时候确实很难想到,以为是一个dp,结果后来讲解的时候,出题人说就是一个BFS,至少BFS是一个非常熟悉的算法啊,当时没做出来有点小遗憾。

2015-11-30 17:26:28 1442

原创 二分 hihoCoder1249 Xiongnu's Land

传送门:点击打开链接题意:沙漠中有许多块矩形水源,水源不相交,问能否找到一根中轴线,使得轴线左边的水源面积大于等于右边的水源面积。在满足两个面积之差最小的情况下,使得轴线靠近右端点思路:只能说当时现场赛的时候太脑残了,。要分两次二分!一次二分是做不到的。第一次二分求出左边面积大于等于右边面积时,使两边之差最小,那么此时左边面积等于多少第二次二分再去让左边面积等于这么多,然后更加靠近右边

2015-11-27 12:16:03 964

原创 分块+二分维护,求区间内数字出现的次数

如题,把区间分块,对每个块里的数字排序,然后在块里二分查找,复杂度理论是O(n^1.5*logn)csy菊苣说把块的大小调整为n*log2(n),复杂度可以降到O(n*sqrt(n*logn))然后我写了组大随机数据测试了一下,如果分块大小是sqrt(n)用了7.6s,分块大小是n*log2(n)时只用了3.6s!!效率提升了非常多倍,感觉又是黑科技的节奏,收藏了const int

2015-11-27 11:18:26 2690 1

原创 acm2015北京区域赛游记

一只完全由大二组成的队伍第一次参加区域赛,最后压铜尾,这可能是上大学后做过最刺激的事情了。。不像许多其他的大神,,接触算法时间太晚了,都是大一才开始学C语言,跟大部分oi大爷比起来差太远了→_→→_→当时比赛的时候后面就坐着3个清华的大一,然后全场第二,只能说现在的自己还太弱开始比赛后一开始看题,,看了好久都没看出哪个是水题,后来第8分钟有队伍出了G,我才去看G题。。结果英

2015-11-20 01:47:45 1663

原创 构造+贪心 Codeforces584E Anton and Ira

传送门:点击打开链接题意:给你一个1~n的排列s1,和另一个排列s2,要把s1变成s2,只能交换数字,交换数字的代价是两个数字位置之差,求最小代价思路:首先把题目变换一下,,变成已知原串s3,要变成1,2,3,...,n-1,n的排列的最小代价,,可以通过s1和s2得到s3之后的操作,就变得十分技巧。首先,我们能发现,如果交换的两个数字,都是朝着各自的位置前进,那么就一定是最优的。那么

2015-11-06 17:18:23 1041

原创 贪心 Codeforces584C Marina and Vasya

传送门:点击打开链接题意:给两个串s1和s2,现在要构造一个串s3,使得s3与s1和s2比较,恰好都有t个对应位置的字符不一样思路:因为长度都为n,t个对应位置的字符不一样,那么就会有n-t个位置的字符是一样的。那么既然要有n-t个位置字符是一样的,那么如果以前两个字符在某个位置是一样的,那么这个位置肯定要选上,因为这样绝对是最优的那么先统计出s1和s2两个字符串有多少个位

2015-11-06 12:57:16 1125

原创 单调栈 poj2559 Largest Rectangle in a Histogram

传送门:点击打开链接题意:求最大长方形。思路:以前看训练指南上有利用动态规划的方法求最大子矩阵,但是空间复杂度和实现起来都比较麻烦利用单调栈来做这题,代码异常简洁明了。维护一个单调栈,从栈底到栈顶是单调递增的。每一次将一个数加入到栈中时,都要先看栈顶是否有数字大于等于这个数字,如果有就弹起,把这个数字的权值累加到准备加入到栈中的那个数字上去因为,弹出去的那些高度都比这个要高,所

2015-11-02 23:42:10 818

原创 BFS Codeforces591E Three States

传送门:点击打开链接题意:在表格中,有3种site,每种site都是连通的,现在想让3种site连通,要在空地修路,求修最小的路使得3种site都连通。思路:对于3种site,都求一遍BFS,记录每个点到每种site的最短距离。途中顺便维护每种site之间的最短距离那么最后答案会有2种情况,第一种情况是修的路是经过一个site的,这个只有3种情况,都讨论一下还有一种情况是,一个

2015-11-02 23:25:26 968

原创 二分 Codeforces591D Chip 'n Dale Rescue Rangers

传送门:点击打开链接题意:前t秒,风速的向量为(vx,vy),t秒后风速的向量变成(wx,wy),刚开始在(x1,y1),要去(x2,y2),飞机速度的最大大小是v,问到达目的地至少需要多长的时间思路:二分时间,那么就能求出风速对飞机位移的影响,那么影响后,现在与目的地的距离求出来,让飞机直行看是否能在时间内到达,就算验证二分是否满足条件了,剩下的二分就行。#include#incl

2015-11-02 23:18:56 894

原创 尺取法 Codeforces591C Median Smoothing

传送门:点击打开链接题意:给你一个n,和一个长度为n的01序列,定义一种操作,其中序列的最左端和最右端不变,现A[i]等于原A[i-1],A[i],A[i+1]中的众数。问经行多少次操作,序列达到稳定,即再次执行这种操作后序列和执行前还是一样的。如果不能达到稳定,则输出-1思路:如果不能达到稳定则输出-1简直就是个坑啊!仔细分析一下,根本就不可能不稳定,换句话说无论怎样最后都是能达到稳定的

2015-11-02 23:09:25 1066

原创 单调队列 fzu1894 志愿者选拔

传送门:点击打开链接题意:3种操作:队列中加入一个人;队首出队;求队中权值最大是多少思路:运用单调队列来维护。其实单调队列中其实id也是有序的,所以队列出队只要看单调队列的第一个是否等于队首那个就行了。#include#include#include#include#include#include#include#include#include#include#in

2015-10-28 22:18:55 762

原创 单调队列 poj2823 Sliding Window

传送门:点击打开链接题意:有n个数字,有个宽度为k的窗口,从最左边向右边移动,每次都框住k个数字,依次输出这些框中的最大值和最小值思路:运用单调队列维护。一般deque我们都手动模拟,因为一般单调对列对时间复杂度要求都会比较高。一般令cur=rear=0,rear表示尾指针,其实这个指针是取不到的,也就是说左开由闭。当cur单调队列数字都是从队尾进,要求最值的时候一般都是在堆首取。

2015-10-28 21:15:52 732

原创 左偏树+并查集 hdu1512 Monkey King

传送门:点击打开链接题意:很多只猴子,每个猴子有个强壮值,一开始每只猴子都不认识。会有m次冲突,每次冲突的两只猴子如果不认识,就会各自在认识的人中各找一个最强壮的人打架,打完后打赢的那个人的强壮值会减半,并输出减半后的值,然后猴子两边的人都会互相认识成为朋友(所谓不打不相识..),如果两只猴子冲突但是已经认识了,那么就输出-1思路:左偏树上次翻论文无意中发现的,感觉这种数据结构好66666

2015-10-27 22:46:44 919

原创 AC自动机 zoj3228 Searching the String

传送门:点击打开链接题意:告诉你原串,告诉你很多个子串,有两种匹配模式,一种是可以重叠的匹配,一种是不能重叠的,问每个子串出现的次数。子串可能有重复的出现。思路:这题揭示了AC自动机的两种处理方法。首先是当AC自动机中出现有串重复的时候,我们应该怎么处理,我这里用到了一个数组pre,如果这个节点结尾的子串是第一次出现,pre标记为自己,如果这个节点结尾的子串不是第一次出现,那么就把pr

2015-10-25 16:26:33 883

原创 AC自动机+dp打印路径 hdu2296 Ring

传送门:点击打开链接题意:告诉你m个字符串,每个字符串有一个权值。再告诉你n,要求新的字符串长度小于等于n,现在求总权值最大的最小字典序字符串是多少思路:首先用AC自动机去把状态优化,然后列出dp方程,这些都是不难的,问题还在于打印路径上。由于要求字典序最小,但是实际上在AC自动机顺着插入的话,只能比较后缀,根本比较不了前缀,所以不是很好做。有的题解是插入字符串到AC自动机的时候就把它翻转

2015-10-24 16:00:49 879

原创 AC自动机+状压dp hdu2825 Wireless Password

传送门:点击打开链接题意:有个密码长度为n,现在有m个魔力单词,要求密码中魔力单词的种类数>=k,问这种密码的种类数。思路:和之前一样,我们会想到AC自动机去压缩状态,把状态给简化。然后我们就会想到一个问题,,因为一种种类实际上可能会出现很多次,但是统计的时候只统计一次,所以用普通的dp可能就做不到了,那么我们就必须考虑复杂度更高的方法,又看到m但是这题也有两个很容易TLE的问题,,首

2015-10-23 22:50:50 862

原创 AC自动机+快速矩阵幂 poj2778 DNA Sequence

传送门:点击打开链接题意:DNA只有AGCT四种脱氧核糖核苷酸组成,现在告诉你n条致病基因序列,,问长度为m的DNA序列里不含任何的致病基因的种类数是多少。思路:这题可谓是AC自动机的经典神题。。如果只是简单的认为AC自动机只不过是在文中匹配字符串那就打错特错了,它还可以用来压缩状态~这题我们先构想一下动态规划。如果我们没学过AC自动机,,现在假如致病基因的长度都为3.我们可能会这

2015-10-23 12:18:27 763

原创 AC自动机+base64解码 zoj3430 Detect the Virus

传送门:点击打开链接题意:告诉你邮件内容,告诉你病毒,问内容里有多少种类的病毒。一听就知道是裸AC自动机,,但是有两个很恶心的地方。。首先是base64解码,还是第一次手撸这个也是麻烦..另外一个很容易弄错的地方就是,有的语言字节是从0~255,其实C语言的字节是从0~127是正数,最高位表示的是负数了...所以说,base64解码后,可能有的字节是大于127的,所以我们不能用char类型来存

2015-10-23 12:01:30 822

原创 AC自动机+dp+大数 poj1625

传送门:点击打开链接题意:告诉你有哪些字符可以用,然后再告诉你哪些单词不能出现,要你求长度为m的字符串只由给你的字符组成,但是不能出现那些单词的种类数。思路:..一分析就发现,,貌似爆long long了,,醉了。。总的思路和那个DNA的思路是一样的,用AC自动机完成了矩阵的转移,很逆天的压缩了状态。。除了大数其他和那题基本一样的可以去看看那题..#include#include#

2015-10-23 11:56:02 825

原创 离线LCA hdu2586 How far away ?

传送门:点击打开链接题意:一棵树,告诉你两个点,求两个点之间的距离思路:裸LCA。维护点到根节点的距离,那么u到根节点距离+v到根节点距离-lca(u,v)到根节点距离即可离线LCA的思路很清晰,大概就是利用从下向上的并查集去维护节点。#include#include#include#include#include#include#include#include#i

2015-10-21 15:10:58 698

原创 AC自动机 hdu2222 Keywords Search

传送门:点击打开链接题意:给一个字典,再给一个查询串,问字典中的单词一共在这个查询串中出现了多少次。思路:裸AC自动机。。第一次做,照着bin神代码写了个模板留着以后贴#include#include#include#include#include#include#include#include#include#include#include#include#i

2015-10-21 14:48:41 783

原创 贪心+map Codeforces583C GCD Table

传送门:点击打开链接题意:参照那个表格,,最后给出的n*n个那表格中的数字,是打乱的,求还原出是哪n个数字思路:可以发现,G表格中,正斜对角线恰好是ai,因为对自己的gcd就等于自己。那么也就是说所有的ai最后都会存在于n*n个数字中,进一步一想我们就能发现,最大的那个数字一定是A数组中的,因为gcd不可能比原数大。那么第二次我再选出最大的,此时这个最大的会与之前已确定的A数组中的会有gc

2015-10-17 20:18:33 1020

原创 字符串hash+线段树 Codeforces580E Kefa and Watch

传送门:点击打开链接题意:给你一个原串,只有0和9组成。现在有两种操作操作1,区间修改,把[L,R]的数字都改成d操作2,询问区间[L,R]中是否满足si = si + x for all i from 1 to |s| - x.思路:虽然本身会字符串hash,但是没想到还能这样玩。。hash的思路和普通的是一样的,每一位中间乘以某个数字。。如果担心最后的答案,可以对两个大

2015-10-17 19:55:28 1058 1

原创 状压dp Codeforces580D Kefa and Dishes

传送门:点击打开链接题意:有n种菜,现在选m种菜来吃,还有很多条好处,如果在吃y的前一道菜是x的话,那么就可以获得满意度。每一种菜都有一个满意度。思路:...只能说Codeforces的测评机实在是太好了,n=18,O(n^2*2^n)复杂度的记忆化搜索代码都能在500ms跑出来,我自己本地跑了3秒多- -如果你敢写O(n^2*2^n)复杂度的代码的话,那基本就做完了。设dp[i][S

2015-10-17 19:18:29 1131

原创 尺取法 Codeforces580B Kefa and Company

传送门:点击打开链接题意:n个人,告诉你n个人的工资,每个人还有一个权值,现在从这n个人中选出m个人,使得他们的权值之和最大思路:先按照工资从小到大排序,那么每次最优的必然是一个子区间中的值。所以我们能确定,所有的答案此时都是子区间,。所以利用尺取法O(n)求出答案#include#include#include#include#include#include#includ

2015-10-17 19:02:19 942

原创 最大费用最大流 hdu4322 Candy

传送门:点击打开链接题意:有m个人,n个糖果,告诉你每个人喜欢哪些糖果,如果人分到喜欢的糖果幸福值+k,分到不喜欢的幸福值+1,现在告诉你每个人所需要的最低幸福值,问能否让所有人都开心。思路:这是一道很6666的费用流的建模题首先我们可以去分析,如果不喜欢,那么把这个糖果分给谁,幸福值都能+1,所以我们不如把s连接所有的糖果,容量为1,费用为0,如果糖果被人喜欢了,就连一条糖果到人的边

2015-10-14 13:24:23 790

原创 dp最大子矩阵 hdu4328 Cut the cake

传送门:点击打开链接题意:求全红的矩形,或者全蓝的矩形,或者红蓝相间的矩形,这些矩形中周长的最大值思路:大白书上有方法解释了如何利用动态规划思想去做求最大子矩阵,这里就不多说了。求最大子矩阵还有另外一种方法,就是利用单调栈,这也是一种非常棒的方法。这题还有一个小技巧,就是如何处理红蓝相间的呢。。我们直接把(i+j)%2==1的全部翻转,这样再做一次求最大子矩阵,,就搞定了#includ

2015-10-14 13:11:34 798

原创 dp编辑距离 poj3356 AGTC

传送门:点击打开链接题意:给一个字符串A,和一个字符串B,现在能对字符串A进行删除,修改,插入等操作,问至少需要多少步才能将字符串A转换成字符串B思路:利用动态规划,总的思路和求最长公共子序列几乎是一模一样的。这里直接写一下方程..边界dp[i][0] = dp[0][i] = i;当x[i] == y[j]时,i和j不需要编辑,要么删除,要么插入,要么替换dp[i

2015-10-13 14:56:56 764

C#八数码游戏实例

C#八数码游戏实例

2016-02-14

C#计算器实例

C#写的计算器实例

2016-02-13

Android 短代码实现 最简易的画板

Android 短代码实现 最简易的画板

2015-09-07

易逍遥模块1.6.ec

逆天http模块,无需处理cookie!(只有跨域才需要保存cookie)

2015-06-13

易语言 skinh破解版

SkinH_EL.dll

2012-08-15

空空如也

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

TA关注的人

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