自定义博客皮肤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)
  • 收藏
  • 关注

原创 DFS Codeforces505D Mr. Kitayuta's Technology

传送门:点击打开链接题意:告诉你n个点,和m条关系,每个关系有u和v,要求u能通过有向边到达v,问要完成这个有向图至少需要多少条边。思路:就是个xjb的贪心....首先,我们把边按无向图处理,把图分成很多个分块。对于每个分块,如果这个分块里存在环,那么说明边数>=节点数对于一个分块,假如我把这些点首尾相连,此时是完美的!因为现在我用了最少的边数,使得可以从一个点到任意一个点,那么无

2016-01-11 22:23:53 1302

原创 hash+dp打印路径 Codeforces615C Running Track

传送门:点击打开链接题意:a串有很多个,然后能把a串剪断,剪成很多条小区间,区间还能翻转。然后给你一个b串,求b串用a串的区间的字符去组合出来,最少需要的区间数,要求输出方案。长度思路:首先,我的思路非常蠢。。标准答案是暴力+贪心,确实后来想了下讲的太有道理了~我的思路是,把a串的所有子串全部取出来,然后双哈希保存。然后再对b串做dp。如果[j+1,i]在a串中存在,那么就能有dp

2016-01-09 22:24:12 979

原创 费马小定理 Codeforces615D Multipliers

传送门:点击打开链接题意:这些质数的乘积所组成的那个数,求这个数的所有约数的乘积,取模1e9+7思路:先分别求出每个数出现的个数,那么对于这一类的数,计算它对答案的贡献。首先,假如最多有s个这样的数字,假设这个数为a,那么我要考虑,对于一个约数,出现了1次,2次......s次,然后其他的质数的出现情况有多少种呢,假如其他质数出现的次数为cnt[i],那么就有P = (cnt[1]+1)*

2016-01-09 22:02:09 1050 2

原创 Codeforces507D 数位dp The Maths Lecture

传送门:点击打开链接题意:一个长度为n的数,没有前缀0,如果这个数存在一个后缀y,这个y没有前导0且大于0,能整除k,这么就认为数x是满足要求的问有多少个数x满足要求思路:明显是从后往前算的数位dp。首先我们肯定可以想到dp[i][j]表示正在考虑第i位对后面的影响,当前的数字取模k等于j那么再枚举第i+1位是什么数字,就能往后面转移了,不过这道题有两个细节和一个trick

2016-01-08 01:30:36 831

原创 线段树 hdu2871 Memory Control

传送门:点击打开链接题意:区间内4种操作,1种分配连续长度的区间,2获取某个位置是被谁覆盖的,3获取第几个被覆盖的区间的左端点和右端点,4清空全部。思路:几乎涵盖了线段树的所有操作,有种恶心的感觉,,要维护的东西1.sum,lsum,rsum最大连续个数2.cnt个数,放在左端点3.col懒惰标记,默认-1,为0表示要清空,为其他数字表示这一段被占领#include#

2016-01-07 14:32:35 761

原创 splay树 hdu1166 敌兵布阵

传送门:点击打开链接题意:....省略100字。。思路:搞了两天的spay,终于明白了这个算法的优势以及用途和原理了。。。首先是作用:splay是介于线段树和平衡树之间的,是一种平衡树,既能用来做set,也能用来做priority_queue,还能用来做线段树的一种万能树型数据结构!与平衡树相比:与BST相比,BST的复杂度会退化,splay的复杂度平摊后是nlogn。与红黑树和S

2016-01-06 21:01:25 1117

原创 主席树 hdu2665 Kth number

传送门:点击打开链接题意:区间查询第k大思路:主席树裸题,原来以前看不懂主席树是因为不懂可持久线段树,要学习主席树,应该先学习可持久线段树,然后再学的,这样主席树就能秒懂了。主席树就是利用可持久线段树维护前缀和,然后利用前缀和就能查询中间的第k大了。#include#include#include#include#include#include#include#inc

2016-01-05 00:11:58 980

原创 思维 Codeforces491B New York Hotel

传送门:点击打开链接题意:一个二维网状格点,先给一个n,然后有n个坐标,表示最开始n个人的坐标,然后给一个m,然后有m个坐标,现在要从m个坐标中选出一个坐标,使得这个坐标到n个坐标的最大距离最小输出最大距离最小是多少,以及最后选出的是m个点中的哪一个, n,m思路:这题还真一下子转不过弯来了- -首先,很明显答案应该是min{|N[i].x-M[j].x|+|N[i].y-M[j].y

2016-01-04 00:43:31 900

原创 线段树 bzoj4373 算术天才⑨与等差数列

传送门:点击打开链接题意:强制在线,单点更新,区间询问,询问这个区间的数从小到大排序后,是否能构成等差为k的等差数列思路:利用线段树维护数字之和,维护平方和,因为平方和很大所以还要取模,还要维护区间内的最小值然后每次查询先取出最小值,然后通过等差k求出区间内数字和以及平方和应该等于多少,然后再用线段树查询,看是否等于这么多。#include#include#include#i

2016-01-03 22:30:58 1480

原创 可持久性数组 bzoj3674 可持久化并查集加强版

传送门:点击打开链接题意: 强制在线操作,定义3种操作,查询两个点是否在同一集合,合并两个点,把状态恢复到之前的某个状态思路:利用线段树实现的可持久性数组,其实原理上就是线段树,那么是如何实现可持久性数组的呢。对于某次修改,就再造一颗线段树,但是这样明显效率和空间都会爆炸。因为我们其实有很多节点都是上一次剩下的,其实我只需要新建新添加的那条链上的节点即可。其他节点只需要直接接在以前

2016-01-03 19:38:24 2113

原创 最小路径树 Codeforces545E Paths and Trees

传送门:点击打开链接题意:告诉你图,和起点,求一棵树,使得起点走树上的路径到达其他的节点的路径是原来图中的最短的,且要求起点到所有点的距离之和最短。思路:其实就是dijkstra的思路,只不过要稍微注意几个东西,首先是要保存上一条边的id,然后就是要注意当dist相同时,两条路径的长度相等时,应该要考虑最后一条边的长度,应该要选长度小的,因为两种方法实际上都是最短的,但是如果选边短的,就说

2016-01-02 23:07:54 876

原创 二分+线段树 Codeforces609F Frogs and mosquitoes

传送门:点击打开链接题意: 有n青蛙和m蚊子(n,m蚊子两个参数,位置pj,权值bj只有当xi+ti>=pj时,第i只青蛙才能吃到第j只蚊子。如果第j只蚊子能被多只青蛙吃到,那么xi最小的青蛙会把这只蚊子吃了每次青蛙吃了某只蚊子以后,ti会增加蚊子的bj输出n只青蛙吃的蚊子数,以及最后时候的舌头长度ti蚊子会按照给出的时间顺序出现。思路:我们先来考虑

2016-01-02 17:01:15 1234

原创 lcp+dp Codeforces611D New Year and Ancient Prophecy

传送门:点击打开链接题意:长为n的只有数字组成的字符串(n思路:最难的地方,就是如何去快速判断两个数字的大小谁大谁小呢?我们先来讲下最长公共前缀lcp的定义。如果有串A和串B,lcp[i][j]表示的是串A从原串第i位置开始,串B从原串第j位置开始,那么从这两个位置开始的有多少个字符相等那么如何来求lcp呢,方程很简单,看了都能懂lcp[i][j]=lcp[i+1][j+1]+

2016-01-01 17:58:55 1055

原创 前缀和 Codeforces611C New Year and Domino

传送门:点击打开链接题意:告诉你一个地图(5e2*5e2),里面有障碍物,现在告诉你地图里面的一个子矩阵的对角点坐标,求这个子矩阵里能放多少个1*2的多米诺牌思路:求dp[i][j]表示(1,1)到(i,j)这个子矩阵的的答案,A[i][j]表示第i行的前j列的答案,b[i][j]表示第i列的前j行的答案那么对于(bx,by),(ex,ey),答案就等于dp[ex][ey]-dp[ex

2016-01-01 17:34:52 1134

原创 找规律 51Nod1350 斐波那契表示

传送门:点击打开链接题意:每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3

2015-12-29 14:01:28 1640 1

原创 状压dp fzu2218 Simple String Problem

传送门:点击打开链接题意:一个长为n(n求两段子串A和B,A和B中间没有共用的字母类型,求len(A)*len(B)的最大值思路:当时想到了3种方法,感觉各有优势,都来BB一下。第一种方法:复杂度O(2^k*n)用s枚举每种字符在A串中是否使用,然后原串就能变成01串了,那么1表示在A中可以使用,0表示在B中可以使用就变成了求0的连续最长长度,和1的连续最长

2015-12-28 12:48:03 1155

原创 二分 51Nod1105 第K大的数

传送门:点击打开链接题意:n思路:二分。主要想说,,原来在重复的数的有序数组中二分某个数,只要算一次lower_bound就行了- -。。。。#include#include#include#include#include#include#include#include#include#include#include#include#include#inclu

2015-12-28 01:05:49 1068

原创 排序 Codeforces612D The Union of k-Segments

传送门:点击打开链接题意:告诉你很多条线段,从小到大输出所有的区间使得区间里面所有的点都被覆盖了至少k次,输出的区间数量越小越好。思路:先把左端点记为1,右端点记为-1,然后把端点合在一起排序,然后一顿乱搞。#include#include#include#include#include#include#include#include#include#include

2015-12-26 22:45:42 919

原创 栈 Codeforces612C Replace To Make Regular Bracket Sequence

传送门:点击打开链接题意:有4种括号配对,现在能把一种括号改变成另一种括号,但是不允许改变括号的开口方向。问最少的操作次数能把括号全部配对思路:运用栈去操作,如果是左括号,则压入栈,如果是右括号,看是否和栈顶配对,如果不配对就ans++,无论是否配对成功都弹出栈顶。如果途中栈空了也取栈顶,或者最后栈不为空,这些都是非法的,特判一下#include#include#include

2015-12-26 22:42:25 862

原创 离线+dp 51Nod1020 逆序排列

传送门:点击打开链接题意:求长度为n的排列的逆序对等于k的排列总数,取模1e9+7思路:刚开始想找规律,但是发现根本没法搞。。但是我们如果从dp的角度去思考,就能找到一个dp是这样的dp[n][k]=dp[n-1][i],max(k-n+1,0)其中边界dp[0][0]=1那么就能用离线+前缀和去搞答案了要注意的就是ans等于0的情况,离线的时候要注意p是否能取到所有的

2015-12-25 01:07:43 990

原创 中位数求和 BUAA214 大新闻

传送门:点击打开链接题意:给一个序列(n思路:O(n^2logn)的方法太多太多了,这里我们思考如何用O(n^2)来做,说实话非常的巧妙首先我枚举位置p为中位数,那么,我再创一个辅助数组,把位置p标记为0,把位置上的数比A[p]小的标记为-1,把位置上的数比A[p]大的标记为1,把位置上的数等于A[p]的且位置比p小的标记为-1,把位置比p大的标记为1那么,假如原数列是1 2 3

2015-12-23 01:03:02 1995

原创 线段树 Codeforces292E Copying Data

传送门:点击打开链接题意:给两个数组A和B,有两种操作,操作1,将A数组的一部分复制到B数组的某一部分上,操作2,输出B数组的p位置当前的数值。思路:利用线段树打懒惰标记成段更新裸题#include#include#include#include#include#include#include#include#include#include#include#inc

2015-12-23 00:54:15 746

原创 前缀并查集 Codeforces292D Connected Components

传送门:点击打开链接题意:给出n(思路:连通块肯定想到用并查集去维护。然后看到n比较小,所以可能可以每次查询里面复杂度带有n。因为删边用并查集不是很好维护,所以我们可能要想到能不能避免边的删除,那么很容易的想到前缀和思想。用PL[l]来保存[1,l]前l条边组成的图里面的并查集父节点的情况;用PR[r]来保存[r,n]后r条边组成的图里面的并查集父节点的情况;那么对于每

2015-12-22 23:51:02 1172

原创 DFS Codeforces292C Beautiful IP Addresses

传送门:点击打开链接题意:给n个数字,要求用这n个数字去组成ip,要求每个数字都出现过,且ip里面去掉.后是一个回文思路:大暴力,枚举的时候把ip分一半枚举就行,求出没有.的所有组合,然后再考虑添加.#include#include#include#include#include#include#include#include#include#include#inc

2015-12-22 23:41:06 1198

原创 离线线段树 Codeforces522D Closest Equals

传送门:点击打开链接题意:n个点告诉你,m次查询,每次查询给l,r,求区间[l,r]里面两个相等的数字的最近的距离是多少。思路:一般这种没有修改的题,都可以用离线来搞,按照区间右端点排序。然后各个点的值比较大,把它离散一下。用pre[i]维护上一个节点的位置,然后在线段树中,一个节点维护的是以这个节点作为两个相等的数字的左边那个,最小距离是多少。每次移动右端点时,都更新一下A[pre[

2015-12-20 21:23:36 1275

原创 贪心+二分 Codeforces609D Gadgets for dollars and pounds

传送门:点击打开链接题意:一个人手上有s卢布,他要在n天内买m样东西中的k样样例第二行是多少卢布换一美刀,第三行是多少卢布换一英镑然后接下来是m样东西,告诉你每样东西用什么货币结账(1是美刀,2是卢布),以及要多少那种外币要求:最早完成买k样的天数,以及输出方案输出第几天买完k样商品,然后k行购买的商品的id,第几天购买的输出任意答案就可以了 一种商品只能购买一次,

2015-12-20 21:15:10 1075

原创 LCA+最小生成树 Codeforces609E Minimum spanning tree for each edge

传送门:点击打开链接题意:给一个图,有m条边n个点,如果对于一个最小生成树中要求必须包括第i条边,那么最小生成树的权值总和最小是多少思路:求出最小生成树,然后对于m条边相当于m次查询,每次查询的时候,相当于求出在最小生成树中(u,v)路径上的边权最大值,那么新添加了一条边,就要把这条最大值的边删掉。所以题目转换成了,求路径上边权最大值。可以用LCA来做,也可以用树链剖分来维护。

2015-12-20 20:45:43 1431

原创 单调队列 poj1821 Fence

传送门:点击打开链接题意:有K个工人,和长为N的篱笆,现在要给篱笆上色。每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱问如何分配,使得K个工人的总利润最大思路:先设出方程,设dp[i][j]表示前i个工人,前j个篱笆的最大获利那么就有dp[i][j]=max(dp[i-1][j],dp[i][j-1]);dp[i

2015-12-16 15:29:59 1909

原创 单调队列 hdu3401 Trade

传送门:点击打开链接题意:有种股票,现在知道n天,拥有的股票股数必须思路:一道非常好的单调队列优化dp的好题!首先,dp无非就两种设法,1.dp[i][j]表示最后一次操作为第i天,已经拥有了j只股票的赚的最大钱数.2.dp[i][j]前i天里,已经拥有了j只股票的赚的最大钱数.我们可以发现,如果是第一种设法,方程不好转移,所以我们采用第二种,那么很容易就能列出方程

2015-12-15 00:29:32 739

原创 数位dp hdu5598 GTW likes czf

传送门:点击打开链接题意:告诉l,r,g,t,每次在[l,r]区间内选一个数字,再从g,t这两个数字里面选一个数字,求这两个数字的@值。定义x@y=((x&y)|y)^x思路:首先,我们能够证明,x@y=((x&y)|y)^x其实就等于x^y,这算是第一个绕圈把然后呢,我们再考虑到,一个数x对n个不同的数字求位异或,那么位异或的结果一定都不同。所以,题目可以转换成(r-l+1)*2

2015-12-14 01:38:01 1741 2

原创 倒推 hdu5596 GTW likes gt

传送门:点击打开链接题意:n个GT排列在一起,他们有两组,有可能是第0组的,也有可能是第1组的。每个人都有一个能力值。每次第i秒第i个人都会对他前面的另一组的人发起攻击,如果能力值比他低,就会退出游戏。另外还有m个数字Ci,在第Ci秒末尾的时候,前Ci个存活的人的能力都会+1,问最后剩余的人数思路:很明显可以逆推。用isc[i]表示有多少个Ci等于i,s[i]表示isc在前i个的前缀和。那

2015-12-12 23:28:34 836

原创 单调队列 hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

传送门:点击打开链接题意:部分背包思路:最简单的方法当然是二进制分解,不过最近在练习单调队列,用单调队列去做部分背包,也算是单调队列优化dp里迈出的第一步把~使用范围:只有对于f1(x)=max/min(f2(k))+f3(x) 且f3(x)与k无关,k对于部分背包这道题,本来的方程应该是dp[r+i*p]=max(dp[r+k*p]+(i-k)*h),k那么只需要稍微变形一下

2015-12-11 23:28:25 880

原创 凸包 Codeforces605C Freelancer's Dreams

传送门:点击打开链接题意:有n份工作,第i份工作做1个单位时间获得ai经验和bi钱,现在要凑齐p点经验和q钱,至少要工作多久,工作的时间可以为小数思路:仔细想想总觉得哪里不对劲,是不是感觉好像只需要1份工作或者2份工作的组合就能形成最优的?事实就是这样的,想达到最优最多只需要选择2份工作就行了,那么问题就是怎么枚举出这2份工作。现在我们考虑单位时间内能完成的内容我们假设向量V1

2015-12-11 12:59:01 1436

原创 斐波那契博弈 hdu2516 取石子游戏

传送门:点击打开链接题意:1堆石子n个,第一个人可以取任意个数但不能全部取完,以后每次拿的个数不能超过上一次对手拿的个数的2倍,轮流拿石子,问先手是否必赢思路:斐波那契博弈,后手赢的情况的数字会呈现斐波那契数列。#include#include#include#include#include#include#include#include#include#includ

2015-12-10 18:52:52 753

原创 威佐夫博弈变形 poj2348 Euclid's Game

传送门:点击打开链接题意:给你两个数字m,n,每次可以使得max{m,n}减去min{m,n}*k,后来的数字必须要>=0如果有一个数字变成了0,那么就算赢思路:因为只有两个状态,所以我们可以通过状态的转移递推找到规律,然后会发现和黄金分割数有关。。#include#include#include#include#include#include#include#inc

2015-12-10 18:49:55 1159

原创 nim博弈 hdu3951 Coin Game

传送门:点击打开链接题意:n个硬币摆成一个环,每次可以取的个数为[1,k]且必须是连在一起的,先取完的胜利思路:如果刚开始不是环,是链状的,那么就可以直接用SG函数以及nim游戏的知识搞定,但是这个是环,其实这个环也可以分解成一个独立的链状游戏,看留给对手的状态中是否有必输的情况,就能知道环状的是否能必赢了。然后打出表,找规律#include#include#include#in

2015-12-10 18:45:03 768

原创 巴什博弈 hdu2149 Public Sale

传送门:点击打开链接题意:两人竞拍,每次加价的价格在[1,n]范围内,第一次>=m的赢思路:巴什博弈,当m%(n+1)!=0时,先手赢,否则后手赢#include#include#include#include#include#include#include#include#include#include#include#include#include#inc

2015-12-10 18:40:02 714

原创 Anti-nim博弈 John poj3480

传送门:点击打开链接题意:和nim游戏一样,只不过取最后一个石子的人输。思路:有一个SJ定理,是专门用来求Anti-nim游戏的,如下SJ定理SG函数的求法一模一样,最后如果只有一堆,也能用SJ定理如果为Anti-Nim游戏,如下情况先手胜SG异或和为0,且单个游戏的SG全部SG异或不为0,且存在单个游戏的SG>1,即#include#include#inc

2015-12-10 18:36:05 903

原创 威佐夫博弈 hdu1527 取石子游戏

传送门:点击打开链接题意:轮流取石子。1.在一堆中取任意个数.2.在两堆中取相同个数。最后取完的人胜利,问先手是否必赢思路:威佐夫博弈博弈,满足黄金分割,且每个数字只会出现一次。具体求法见代码#include#include#include#include#include#include#include#include#include#include#include

2015-12-10 18:32:47 810

原创 nim博弈 hdu2176 取(m堆)石子游戏

传送门:点击打开链接题意:m堆石子轮流取,每次只能对一堆操作,每次必须要取,取的石子数量没有上限。第一个取完的胜利。问最后是否能赢,第一步要怎样才能赢、思路:nim博弈,根据SG函数定理,如果是独立游戏,那么应该是所有独立游戏的SG函数的异或值。很容易可以发现,对于每一堆石子的SG函数都等于石子的个数,所以就相当于求所有石子个数的异或值看是否等于0,如果等于,说明先手必输,否则说明先手

2015-12-10 18:27:59 901

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关注的人

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