自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(374)

转载 linux 环境下GDB调试器基本用法

转载自:http://blog.csdn.net/yeyuangen/article/details/6825542侵删。本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其

2017-11-03 14:27:20 265

原创 HDU 5961传递 思维 + bitset

传送门:HDU 5961题意:中文题思路:这题如果按hdu上的6s时限的话就有很多做法了,从每个点开始bfs判断是否有长度大于等于2的最短路径,或者dfs判断给出的图中是否有三元环等等,但是据说现场赛是1500ms时限,那这些做法就都不行了。能在现场赛实现下通过的一个方法是用bitset将每个点的出边保存下来,然后枚举每一条边,判断该边的两个端点的出边是否都为下图的情况即判断是

2017-10-17 15:39:43 209

原创 Codeforces 873D. Merge Sort 分治 + 构造

传送门:Codeforces 873D题意:给出一种特殊的归并排序,分治的方法同普通的归并排序一样,只是如果当前待排序的区间已经是有序的,就不会再继续递归了,让你构造一个会调用k次mergesort函数的序列。思路:因为我们上来就会调用一次mergesort函数,并且只要当前待排序区间不是有序的,那么在该层递归里就会调用两次mergesort,因此可以推出总调用次数一定是个奇数。然后我们递

2017-10-17 13:03:01 348

原创 HDU - 5963 朋友 思维 + 博弈

题意:中文题。思路:考虑和根相连的一条树链,如果这条树链上和根相连的那条边权值为1,那么最终在该链上的操作次数要为奇数次才能使得和根相连的边的权值变为0(因为不论选择该条树链上哪个点,此边的权值总会翻转),同理可得和根相连的边若初始权值为0要操作偶数次。而无论两个人怎么操作,都不会改变这些根的直连边变0所需操作次数的奇偶性,而若总操作次数为奇数次的话那就必定是先手胜了,因此我们只需维护一个每个

2017-10-16 23:50:46 188

原创 HDU - 5493 Queue 线段树 || Treap

传送门:HDU5493题意:给出n个人的身高和每个人前面或者后面有多少人比他高(不知道是前面还是后面),问能否构造出一个合法的序列。思路1:将所有人按身高从小到大排序,然后一个个取出来插入线段树,插入线段树的时候要保证前面留出足够的空来给比他高的人,又因为要字典序最小,那么我们插入的位置就是要min(ki, n - i - ki - 1) + 1.代码:#include#defi

2017-10-14 20:56:58 159

原创 HDU - 5573 Binary Tree 构造

题意:给出一颗二叉树,根节点为1,子节点为父节点的2倍和2倍+1,从根节点开始依次向下走k层,问如何走能使得将路径上的数进行加减最终结果得到n。思路:来自:点击打开链接做题一定要注意数据范围!  n 是真的没想到利用差值去搞事情。。代码:#include#define ll long longusing namespace std;int main(){ int

2017-10-14 18:44:59 143

原创 HDU 5008 Boring String Problem 二分 + 后缀数组

传送门:HDU 5008题意:给出一个字符串和q次询问,每次问字典序第k小的子串是哪个,若有多个字典序相同的第k小字符串,输出起始点最小的那个。思路:后缀数组经典应用之一有求一个字符串的不同子串个数,由于后缀数组的后缀都是按字典序排好序的,因此每个后缀贡献的子串也是排好序的,这样我们可以搞一个不同子串个数的前缀和数组,然后就可以二分求出一个解来了,但是这个解不一定是起始点最小的解,因此我们

2017-10-13 16:45:17 205

原创 HDU - 5009 Paint Pearls dp + 链表 + 下界优化

传送门:HDU 5009题意:给出n个连续的珠子,珠子有不同的颜色,现将其划分成任意多段,每一段的代价为该段中颜色种数的平方,问划分的最小总代价和是多少。总思路:dp[i]代表处理到第i个珠子的最小花费,显然dp[i] = min(dp[j] + num[i][j] * num[i][j])(0 优化方法1:用双向链表维护珠子的颜色,使得任意时刻已经遍历过的珠子中每种颜色都只保存一个最

2017-10-13 12:02:43 118

原创 CodeForces - 867E Buy Low Sell High 贪心 + 优先队列

传送门:CodeForces - 867E题意:有一个物品,在n天内有不同的价格,每天可以选择买入或者卖出该物品,而且只能操作一次,初始手上没有该物品,问能获得的最大利益是多少。思路:题目都告诉你了,我们肯定是要贪心的低买高卖,考虑用优先队列(小顶堆)维护这一过程,我们每次得到一个新的价格,将其和堆顶的价格比较,如果比堆顶的价格低,就直接放入堆中,如果比堆顶的价格高,就意味着我们可以提前以

2017-10-12 15:38:51 560

原创 HDU - 5029 Relief grain 树链剖分 + 线段树好题

题意:给出一棵n个节点的树,和m次操作。 操作a,b,k相当于将树上a,b结点间的路径上的节点都加上一个type k,最后输出每个结点被加最多次的那个type, 若有多个type被加的次数相同,输出编号最小的type。思路:显然要先树链剖分将树上操作变成线性序列的操作,emmm,然后我就不会了。。正解:树链剖分后考虑如何维护更新操作,对于一个操作a,b,k,我们可以在pos[a]位置打上一

2017-10-11 22:50:04 159

原创 HDU - 5036 Explosion floyd(bitset优化) + 概率期望

题意:给出n个房间。每个房间上都有锁。每个房间内有一定数量的能开其他房间的钥匙,若当前手里的钥匙不能再打开新的房间,我们可以选择用炸弹炸开一个新的房间,给出每个房间中钥匙的数目和具体能开那个房间,求要打开所有房间,需要使用的炸弹数目。思路:单独考虑每个点打开需要用炸弹的期望次数,那么所有点的期望之和就是答案。每个点 v 需要用炸弹的期望次数是 1/S, S是u(u->v连通)的数量,然后就变成

2017-10-11 22:16:42 248

原创 Gym-100851F Froggy Ford 最短路变形 dijkstra || spfa

题意:有条宽为w的河流,两岸分别在x = 0, x = w处,河中间有n个石头。在河的左岸有一只青蛙想通过石头跳到对岸去。现在可以在河中间某个位置多加一块石头,使得青蛙在单步跳跃中的最大值最小,问应在哪里加。思路:将左岸抽象成原点,右岸抽象成目标点,原点到任意石头(x, y)的距离都是x,目标点到任意石头的距离都是w - x,任意两石头之间的距离就是他们坐标的欧氏距离,按此建图,跑一个dijk

2017-10-10 21:37:48 204

原创 HDU - 6191 Query on A Tree 可持久化字典树(01Trie) || 字典树启发式合并

题意:给出一个含有n个节点的树,每个点有一个权值,现有q次询问,每次询问给出u,x,问以u为根的子树中的点权值和x异或最大是多少。思路1:在线做法,用dfs序将对子树的询问化成对一个连续的序列的询问,然后对dfs序建立可持久化字典树,每次询问时贪心的寻找一个能使异或值最大的数就好了。第一次写可持久化数据结构,感觉很神奇。代码:#include#define ll long lon

2017-10-09 21:05:32 299

原创 2015-2016 Northwestern European Regional Contest (NWERC 2015) 补题

C.Cleaning Pipes题意:给出n条管道(线段),任意两个管道之间之多有一个交点,忽略一个管道头部和其他管道的交点,问能否选出一个不相交的管道集合来使得所有交点都被这些管道覆盖。思路:将管道抽象成点,两个管道的交点抽象成边,那么问题转化成判断新建的图是否是一个二分图。判断二分图最常用的方法就是染色法,本题当然也就可以用,然而我看dalao的代码还学了另一种方法:利用并查集判断

2017-10-08 23:12:37 242

原创 UVALive - 7139 Rotation 矩阵前缀和(imos和)

传送门:UVALive 7139题意:N*M的网格,一辆车沿着网格线按给定路线走,每个网格里有一个人,人的视线始终看着车,问这些人净转圈数的平方和。思路:因为起点和终点都是左上角,因此我们可以维护每一个格子左边部分的上下经过次数差,这也就是该格子的净转圈数,维护这个经过次数的时候可以用差分的思想(类似树状数组区间更新点查询),然后最后再求一个矩阵前缀和就是每个点真正的值了。代码:#

2017-10-08 00:20:21 219

原创 Codeforces 869 E. The Untended Antiquity 二维树状数组

传送门:Codeforces 869E题意:在一个n×m的方格板上,操作1将一个矩形区域的边界上加上一圈障碍,操作2将一个矩形区域的边界上的障碍移除,操作3询问两点是否能不越过障碍互相到达。题目保证任意两圈矩形障碍不会相交。思路:很容易想到二维树状数组实现区间更新点查询,但是如果只是简单的+1,-1更新的话是无法判断出两点是否可以不经过障碍可达的。因此我们要把每一圈障碍都哈希出一个不同的值

2017-10-07 22:26:58 425

原创 Codeforces 868 D. Huge Strings 字符串思维乱搞

传送门:Codeforces 868 D题意:有n个01字符串,第i个操作是用第l个和第r个拼成第n + i个字符串,然后询问最大的k使得所有长度为k的01串都在这个串中出现过。思路:emmm,借鉴了杜瑜皓大佬的思路和代码风格,这题解法很多,前提是要知道一点:k的范围不会很大,甚至不会超过10。知道了答案范围这么小以后基本就可以瞎搞了,暴力,搜索,二分,STL什么的都能上。大佬的思路是

2017-10-07 19:41:40 374

原创 HDU - 4850 Wow! Such String! 构造(字符串上的欧拉回路)

题意:构造一个长度为N的小写字母字符串,要求所有长度大于等于4的子串只能出现一次。不能构造输出“Impossible”。思路:详见:点击打开链接类似的字符串构造题应该也能抽象出类似的模型。代码:#include#define MAXN 26 * 26 * 26#define mod (26 * 26)using namespace std;struct node{ int

2017-10-07 17:54:12 220

原创 HDU 6183 Color it 线段树(动态分配节点)

传送门:HDU6183题意:有四种操作:0:把所有点清空1:在(x,y)上添加一个颜色为 c 的点(不会覆盖以前的颜色)2:查询横坐标1 到 x1,纵坐标 y1 到 y2 这块区域内颜色种数3:退出思路:因为只有51种颜色,建立51颗线段树,每颗线段树节点下标对应颜色c的y坐标值,节点的值为该y坐标下最早出现颜色c的x坐标,因为每次询问都是[1, x1], 易证这样维护是正

2017-10-05 20:21:01 223

原创 CodeForces - 862E Mahmoud and Ehab and the function 二分(思维题)

传送门:Codeforces 862E题意:给出长为n的a序列和长为m的b序列,求.的最小值,其中0 还有q次操作,每次操作将a[l..r]区间内的数 + x, 每次操作后求一次f(j)的最小值思路:容易得到无论a序列的数怎么变化,每个位置上的数的加减性质是不会变的,即奇数位置上的数一直是加,偶数位置上的减,因此我们将f(j)的值拆成a序列的贡献和b序列的贡献两部分,无论j怎么

2017-10-03 22:12:35 154

原创 HDU - 5514 Frogs 容斥(技巧)

题意:给你n种步长,无限走一个圈,圈长m,位置标号从0到m−1,求至少被经过一次的位置之和。 思路:来自:点击打开链接大致思路就是用两个数组记录每一个因子该算几遍和已经算了几遍了。就算是这样做我也感觉复杂度不科学,因为一个数的因子数目不是根号n数量级的么。。代码:#include#define ll long long#define inf 0x3f3f3f3fusing

2017-10-02 21:47:21 132

原创 HDU - 5556 Land of Farms 枚举 + 无向二分图最大独立集

题意:有一个农场大小为n*m  里面有一些古老的农田,你现在需要新建一些农田,要求新建的农田之间不能相连,古老的农田不可拆分,如果你选择了一块土地(原为古老的农田)建立新农田则该新农田需要把一整块连通的古老的农田全部包含。问最多能新建多少个农田。思路:由于古老的农田只有10个,因此我们可以枚举选哪几个古老的农田,然后对于剩下的空地,相邻空地之间建边,求一个二分图的最大独立集就是剩下的空地中最多

2017-10-02 21:34:02 133

原创 CodeForces - 540E Infinite Inversions 离散化 + 树状数组

题意:有一个1,2,3,4...无限序列,进行m次操作,每次交换i,j位置上的数,问操作完以后有多少对逆序数。思路:来自:点击打开链接思维点在于将没有操作过的连续序列也离散成一个点,权值为序列中数的个数,这样就可以无脑进行交换操作,然后用树状数组统计一下逆序对数就好了(注意每个点有权值)。代码:#include#define ll long long#define inf 0x

2017-10-02 21:15:34 166

原创 HDU - 5517 Triple 二维树状数组

题意:有二元组(a,b),三元组(c,d,e)。当b == e时它们能构成(a,c,d)。 然后,当不存在 [ (u,v,w)!=(a,b,c)且u>=a,v>=b,w>=c ]时,则是一个better集合里的元素。 问这个better集合有几个元素.思路:首先能确定的是每一个原来的三元组最多构造一个新的三元组,因为当b == e时,我们只能选所有(a, b)当中a最大的那个(选其

2017-10-02 20:58:44 129

原创 HDU - 4424 Conquer a New Region 并查集好题

题意:给定N个点的树。定义d(u,v)为路径u到v的容量,其值为路径上最小的边权。求一个点作为root,使得其他所有点到该点的容量和最小,求最小值。思路:考虑边权最小的边e,则root一定在其左子树或者右子树上,假设在左子树上,那么e的贡献就是w[e] * sz[rchild] + ans[lchild],然后将最小边去掉,树就被分成了两部分,每一部分都会有一个最小边,这样分治下去就能求出

2017-10-02 20:37:18 210 4

原创 HDU - 5046 Airport 二分 + DLX可重复覆盖

题意:给定n个城市的坐标,要在城市中建k个飞机场,使任意城市距离最近的飞机场的最大值最小,求这个最小距离。思路:最大值最小化是典型二分条件,然后就是如何check,将每对距离小于二分值的两个机场称为互相可覆盖,构造n * n的矩阵,机场之间有覆盖关系的置为1,否则为0,则转化为DLX求解矩阵可重复覆盖问题。DLX精确覆盖详解:点击打开链接 (想不会都难)DLX重复覆盖与精确覆盖:点击打

2017-10-02 19:53:48 179

原创 HDU - 4803 Poor Warehouse Keeper 贪心 + 思维

题意:给出两种操作:如果按下按钮1,会使数量+1,总价对应增长单价数目(因此按下按钮1不会改变单价)如果按下按钮2,会使总价加1,数量不变(按下按钮2会使单价增加)现在问至少多少步可以使得   按钮1数字为x, 按钮2数字为y;

2017-10-01 22:04:05 132

原创 HDU - 4587 TWO NODES 求割点变形(去掉一个割点能得到的最大连通块数)

题意:给出一张图,问从中任意去掉两个点及其邻接边,所有可能情况剩下的图中连通块的数量最大是多少。思路:先枚举去电其中一个点,剩下的一个点用tarjan求无向图割点类似的方法求个最大值,具体就是当一个点能成为割点时,我们不是将其标记出来,而是将其计数器+1,最后取一个最大值就行了。需要注意的就是当根节点为割点时,将其去掉以后得到的新连通块数量是son - 1.(son为搜索树上其儿子的数量)

2017-10-01 21:53:48 281

原创 HDU - 4777 Rabbit Kingdom 预处理 + 树状数组(区间更新点查询)

传送门:HDU4777题意:给出一个长度为n的序列和m个询问,每次询问求[l, r]区间内和区间内其他数都互质的数有多少个。思路:对于每个位置的数先向左向右预处理出最长互质区间L[i], R[i],然后将所有询问记录下来按左端点排序,遍历每个位置pos,若该位置为某个L[i],则将树状数组 i 位置+1,R[i] 位置 - 1,若某个询问Ql == pos,则该询问就可以直接计算出答案了,

2017-09-27 14:12:29 178

原创 CodeForces - 855C Helga Hufflepuff's Cup 树形DP

传送门:Codeforces 855C题意:给你一棵树,可以染m种颜色(1~m),现在定义一种特殊颜色k,一棵树上最多能有x个特殊颜色,如果一个节点为特殊颜色k,那么他相邻的节点的值只能选比k小的颜色。现在问你一共有多少种染色的方法。思路:dp[i][j][k] 表示以i为根的子树上有j个特殊颜色结点的染色方案数,k = 0 :i结点的颜色比k小k = 1 :i结点的颜色为kk

2017-09-26 17:10:26 361

原创 HDU - 4778 Gems Fight! 记忆化搜索 + 状压

传送门:HDU4778题意:有 G 种颜色的宝石,放在 B 个袋子里,两人轮流选袋子(每个袋子只能被选 1 次),每次将选出来的袋子中的宝石放到 cooker 中,cooker 可能会起反应。反应条件是 cooker 中出现至少 S 个一样颜色的宝石,而且一旦起反应,每 S 个一样颜色的宝石就会获得 1 个魔法石。作为奖励,每次获得魔法石的玩家可以再选一个袋子继续游戏,若未获得魔法石,

2017-09-25 23:58:38 149

原创 HihoCoder - 1233 Boxes 状压 + bfs预处理

传送门:HihoCoder - 1233题意:有n个盒子放在n个放盒子的位置,每个盒子大小不一样,每次可以将一个盒子往它相邻的位置移懂,但是只能把小的盒子放到大的盒子上。求最少需要移动多少次之后盒子能从小到大排列地放在每个位置(每个位置一个)。思路:从初始状态(从小到大排好)bfs所有的可能状态,并记录所需要的步数,状态的记录就是用三位二进制数(其实就是八进制)表示一个盒子的位置,这样所有

2017-09-23 20:05:24 159

原创 CodeForces - 859D Third Month Insanity dfs + 概率期望

传送门:Codeforces 859D题意:有 2^n 个队伍进行比赛,每次都是编号相邻的的两队伍比赛,胜出的晋级下一轮,失败的淘汰,这样n轮过后只剩一只队伍时停止。每一场比赛你都可以赌某个队伍赢,第一轮赌中了获得一分,后面每轮赌中得分翻倍,现在给出每两个队伍比赛的胜负概率,问你最大得分期望是多少。整个比赛过程其实就是一颗完全二叉树,每一轮比赛对应二叉树的一层,每一场比赛对应二叉树

2017-09-22 12:46:03 335

原创 CodeForces - 859E Desk Disorder 思维 + 并查集判环

传送门:Codeforces 859E题意:有N个人和2N个座位。告诉你这N个人它们现在的座位。以及它们想去的座位。每个人可以去它们想去的座位或者就坐在原来的座位上。新的座位安排和旧的座位安排,都不允许一个座位被两个人占据的情况。问你新的座位安排的方案数。思路:将整个关系看成一张图,某个人现在的座位以及他想去的座位之间有一条有向边,那么我们可以分析的出这图的几个基本性质:1

2017-09-22 12:25:15 345

原创 CodeForces - 859C Pie Rules DP(逆推)(思维好题)

传送门:Codeforces 859c题意:有n个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取最优的策略,问最后各能获得的最大价值是多少。思路:考虑dp求解,要明确dp的状态只与是否有令牌有关,而与令牌在谁手里无关,因为不论令牌在谁手里,那个人都会尽可能的

2017-09-20 23:20:35 2064

原创 HDU - 5033 Building 单调栈(好题)

传送门:HDU 5033题意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度,给出一个X坐标,高度为0,问X位置能看到的视角是多少度,保证X左右有建筑物。思路:很容易想到用单调栈单调队列什么的去维护,但就是想不出来该怎么维护。。其实我们应该维护一个相邻两顶点间斜率绝对值单调递增的栈,套路还是单调栈的套路,不过是进出栈的条件变成了斜率的相对大小,然后就是把询问也当建筑物放进去会使

2017-09-20 20:02:31 255

原创 HDU - 5040 Instrusive 预处理 + bfs + 优先队列

传送门:HDU 5040题意:给定一张图,Matt要从M移动到T取偷东西,N,W,S,E表示这些位置有监控器,字母表示这些监控器的初始方向,并且每一秒顺时针旋转90度。现在Matt每移动一格需要花一秒,但是如果当前他所在的位置或者他要去的位置被监控器监视,那么如果他要移动,就必须躲在箱子里移动,时间需要花费3秒。或者也可以选择不移动,躲在箱子里1秒,问Matt最少花费多少时间移动到T。思路

2017-09-20 19:47:34 167

原创 HDU - 5037 Frog 贪心(思维好题)

传送门:HDU 5037题意:有一条小河长为M的小河,小河里存在N个石头,有一个每次能跳L米的小青蛙,随意添加石头保证青蛙能从头跳到尾的前提下,问青蛙使用最优策略跳到对岸最多需要多少次。思路:我们要使青蛙跳的次数最多,那么必然要每L + 1的距离尽量使得青蛙跳两次,因此若连续一个或多个L + 1的距离没有石头,那么我们就可以让青蛙每L + 1跳两次,若有原有的石头,我们加石头时就要保证每两

2017-09-20 14:11:55 277

原创 HDU - 5726 GCD 数学 + 思维

传送门:HDU 5726题意:给定一段长度为n的序列和m个询问,每次询问l,r区间的gcd是多少,和区间l,r的gcd相同的区间有多少个。思路:HDU5869简化版,详见 点击打开链接代码:#include#define ll long long#define pb push_back#define MAXN 100010#define inf 0x3f3f3f3fusi

2017-09-19 00:22:46 296

原创 HDU 6215 Brute Force Sorting 链表 + 队列(模拟)

传送门:HDU 6215题意:有长度为n的序列,定义若某个元素a[i]为‘顺序’则必须满足 a[i - 1] a[1] 思路:分析易知连续的降序序列为乱序,那么我们可以链表 + 队列模拟,链表中每次删除连续的降序序列,队列里保存有可能成为新降序序列的开头结点的位置。玄学时间复杂度,个人认为是数据水。代码:#include#define ll long long#defi

2017-09-17 20:35:19 311

空空如也

空空如也

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