
算法刷题之旅
接触oj开始刷题至今恰好一年,付出很多,收获更多,开此专题,将近一年写过的以及以后的题解保存于此,分享给大家。
shiyicode
已弃用! 可以通过shiyi@threebody.xyz联系我
展开
-
网易游戏面试题 - 谁收到了消息
题意思路 乍一看题,冒出来的思路是,将每个用户凡是在同一个群的两个用户看做是一条无向边,这样所有群的所有用户之间的联系就转化为了一张图,然后以官方用户(id=1)为起点,计算所有可以到达的节点的总数,dfs即可,按着这个思路正准备开始写,发现id max为100000,二维数组是开不了了,临界表的话未免也太繁琐了。 才突然意识到我们只需要对所有用户之间的连通性进行判断,至于具体的连通原创 2016-09-19 23:30:04 · 1847 阅读 · 0 评论 -
ZOJ Highway Project(dijkstra&heap&邻接表)
题目链接:146 - The 13th Zhejiang Provincial Collegiate Programming Contest - K Highway Project题意 有n个城市,0是首都,其他编号为1~n-1。 给定m条可以修建的道路,xi, yi, di, ci。表示从x到y需要di秒时间,并且该路需要花费ci$。 现在国王想要一个修建方案,使得他从首都到其他城原创 2016-04-23 18:34:49 · 3164 阅读 · 0 评论 -
BestCoder Round #81 (div.2) 1004 String(动态规划)
题目链接:BestCoder Round #81 (div.2) 1003 String题意 中文题,上有链接,就不贴了。思路 枚举起点i,计算可以达到k个不同字母的最小下标j,则此时有子串len-j个。 将所有起点的值加起来即是结果。代码#include<iostream>#include<algorithm>#include<vector>using namespac原创 2016-04-22 22:29:25 · 2337 阅读 · 0 评论 -
BestCoder Round #81 (div.2) 1002 Matrix(数组模拟指针指向)
题目链接:BestCoder Round #81 (div.2) 1002 Matrix题意 中文题,上有链接,就不贴了。思路 代码原创 2016-04-22 21:29:28 · 2185 阅读 · 0 评论 -
BestCoder Round #81 (div.2) 1001 Machine(找规律)
题目链接:BestCoder Round #81 (div.2) 1001 Machine题意 中文题,上有链接,就不贴了。思路 显然,最后一个灯会变化n次,倒数第二个灯会变化n/3次,依次类推。 那么每个灯的变化次数 可以看做是 实际变化次数%3。代码#include<iostream>#include<algorithm>#include<vector>using na原创 2016-04-22 21:17:10 · 2140 阅读 · 0 评论 -
初学遗传算法解决tsp问题(C++)
前言 断断续续学遗传到现在快一个礼拜了,之前一直在看思想,死想活想,始终不敢去自己代码实现。 今天硬着头皮开始写,写不下去就找博文看,总算是初步的实现了,迈出了智能算法学习的第一小步,心情不可谓不激动。 好吧,说正经的。tsp&旅行商问题 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。 假设有一个旅行商人要拜原创 2016-04-19 15:03:45 · 9509 阅读 · 1 评论 -
njust sequence(二分查找)
题意Time Limit: 1000MSMemory Limit: 65536KBDescription 将一个给定的数列,拆分成K个不降序列,每个数出现且只出现一次,且在各序列中各个数相对于原数列的相对顺序不变。 如7 6 9 8 10可以拆成 7 9 10和6 8。求最小的K值。Input 第一行输入一个整数T(1 <= T <= 100),表示接下来T组测试数据, 每原创 2016-04-17 20:03:36 · 3390 阅读 · 0 评论 -
hihocoder 1149 : 回文字符序列(区间dp)
题意时间限制:2000ms单点时限:1000ms内存限制:256MB描述给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为”a”, “a”, “aa”, “b”, “aba”,共5个。内容相同位置不同的子序列算不同的子序列。输入 第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符串。输出 对于每组数据输出一行,原创 2016-04-11 22:39:05 · 3658 阅读 · 0 评论 -
GDUT Krito的讨伐(bfs&&优先队列)
题意Description Krito终于干掉了99层的boss,来到了第100层。第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点可能有很多只怪物。 Krito现在在0号节点,现在它想要区清除这一层所有的怪物。他现在有atk大小的攻击力。只有当你的攻击力大于这只怪物的防御力时,你才可以打败他,同时每打败只怪物,你会获得一定的攻击力加成。一个节点可能存在着不止一只原创 2016-04-11 02:30:02 · 2468 阅读 · 0 评论 -
GDUT 积木积水(栈)
题意Description现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水。小明又是如此地喜欢二次元,于是他把这个三维的现实问题简化成二维的问题。设雨量无穷、积木不透水、积木间无缝连接,问在这个二次元的世界里,已放置好的积木会有多少单位的积水量? Input第一行包含一个整数T(T≤100),表示接下来的测试样例个数。 每个测试原创 2016-04-10 19:00:57 · 3021 阅读 · 3 评论 -
hihocoder 1032 : 最长回文子串(Manacher)
之前做过类似的题,只是理解了,还没达到驾轻就熟,想到即敲出的地步,所以再练一次。 顺带将Manacher算法思想解释一遍,加强印象,也算作分享吧。Manacher我们用f(x)表示以x位置为中心的回文串的长度 j相对i的对应位置是j’ 那么f(j)与f(j’)和f(i)有什么关系呢。 先看第一张图,下面那条横杠表示f(i),那么,既然j’与j相对应,j’的回文串长度已经求出,那么j原创 2016-04-10 03:29:03 · 2941 阅读 · 0 评论 -
HDU 3038 How Many Answers Are Wrong(并查集)
题目链接:[kuangbin带你飞]专题五 并查集 D - How Many Answers Are Wrong题意 有n次询问,给出a到b区间的总和,问这n次给出的总和中有几次是和前面已近给出的是矛盾的。思路 sum[x]表示x到区间末尾的总和 则a到b的总和c 可以表示为sum[a]-sum[b+1] = c。代码#include<iostream>#include<std原创 2016-03-29 20:59:03 · 3074 阅读 · 0 评论 -
POJ 2236 Wireless Network(并查集)
题目链接:[kuangbin带你飞]专题五 并查集 A - Wireless Network题意 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能。若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑。给出所有电脑的坐标位置,对其进行两种可能的操作,O x表示修复第x台,S x y表示判断x y之间能否通信,若能输出SUCCESS,原创 2016-03-29 18:10:27 · 1928 阅读 · 0 评论 -
POWEROJ 1168-A F(x)(找规律&二分查找)
题目链接:1168-A题意Time Limit: 1000 MS Memory Limit: 65536 KBDescription 小明有一个不降序列(f(1),f(2),f(3),……),f(k)代表在这个序列中大小是k的有f(k)个。我们规定f(n)的前12项如下图。n 1 2 3 4 5 6 7 8 9 10 11原创 2016-03-24 23:55:55 · 2311 阅读 · 1 评论 -
timus 1002. Phone Numbers(KMP&动态规划)
题目链接1002. Phone Numbers题意 现实生活中,你时常会遇到许多许多而且越来越长的电话号码。你需要记住这类型的号码。 例如按下面的图示,把字母划分到特定的数字上,是一种很容易就能把数字记住的方法:1 ij 2 abc 3 def4 gh 5 kl 6 mn7 prs 8 tuv 9 wxy0 oqz 按这种方法:每个字或一个词组可被代替成一原创 2016-03-18 01:54:12 · 1685 阅读 · 0 评论 -
CODEVS 1029 遍历问题
题目链接:1029 遍历问题题意题目描述 Description 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历原创 2016-03-17 18:26:35 · 1146 阅读 · 0 评论 -
[JSOI2008]最大数maxnumber(栈&二分查找)
题目链接:1012: [JSOI2008]最大数maxnumber题意 中文题,点链接看吧,就不copy了。思路 打眼一看立刻就想到线段树,但本题的区间最值查找每次都是在查后L位,感觉用线段树有些大材小用了。 再仔细想想,发现,如果倒数第i个比倒数第i+1个数小,那么第i个数是没有用的,任意查询的最值都不会是它,因为查的是后L个嘛。 所以呢,我们我以维护一个栈,每次添加新元素时原创 2016-03-17 14:19:28 · 1645 阅读 · 0 评论 -
快慢指针判断单向链表是否有环及找环入口
前言 关于快慢指针找环入口的这个问题,之前巴特跟我聊到过,印象比较深,今晚看学长在做的面试题,里面就出现了这个小知识。 发现有些东西不经意间就会用到,于是便出现此文。以后要努力做到善于总结,乐于总结。概念 快慢指针,所谓的快慢,就是指指针每次移动的步长,通常使快指针每次向前移动两步,慢指针每次向前移动一步。判断链表环及找环入口操作 从链表头节点开始,快慢指针同时开始移动,快指针原创 2016-03-13 02:31:04 · 8331 阅读 · 3 评论 -
UVA - 1252 Twenty Questions(状态压缩&记忆化搜索)
题目链接:UVA - 1252 Twenty Questions题意 有n(0思路 从m的数据范围以及题意,很容易可以想到状态压缩,用二进制位来表示集合。 dp(i, j) = c i表示已经询问过的特征的集合 j表示已经确定我选的物体具有的特征的集合 那么显然的,j一定是i的子集。 c表示当前状态还需询问的次数dp(i, j) = 1 + min(原创 2016-03-02 22:34:12 · 1295 阅读 · 0 评论 -
HDU 4549 M斐波那契数列(矩阵快速幂&费马小定理)
ps:今天和战友聊到矩阵快速幂,想到前几天学长推荐去刷矩阵专题,挑了其中唯一一道中文题,没想到越过山却被河挡住去路。。。题目链接:[kuangbin带你飞]专题十九 矩阵 R - M斐波那契数列Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u题意Description M斐波那契数列F[n]原创 2016-03-02 01:05:43 · 1853 阅读 · 0 评论 -
动态规划之最优配对问题
ps 昨晚看了紫书上的最优配对问题,对于上面没有对i判断就直接取异或操作百思不得解,本想今天问学长,百度了下,才发现那里是作者写错了,唉,有点唏嘘,学的越多,对待权威越不敢坚信自己了。。。题意 空间里有n个点P0,P1,…,Pn-1,你的任务是把它们配成n/2对(n是偶数),使得每个点恰好在一个点对中。所有点对中两点的距离之和应尽量小。思路 因为是对集合进行配对,自然需要记录当前集合原创 2016-03-01 15:13:24 · 5345 阅读 · 1 评论 -
BZOJ 1833 [ZJOI2010]count 数字计数(数位dp)
题目链接:[kuangbin带你飞]专题十五 数位DP D - Bomb题意 输入n,m,求n~m范围内的所有数字中,分别输出0~9出现的总数是多少。思路 和 POJ 3286 How many 0’s? (数位dp)的思路基本是一样的,只是略有区别。 0和1~9要分开处理,是因为前缀0的问题。因为当某一位取0时,前面部分的数是不能为0的,而取1~9是可以前面为0的。代码#incl原创 2016-02-29 23:13:50 · 2282 阅读 · 0 评论 -
POJ 3286 How many 0's?(数位dp)
题目链接:POJ 3286 How many 0’s?题意 输入n,m,求n~m范围内的所有数字中,0出现的总数是多少。思路 用2034做个例子。 枚举0在个十百千位上出现的次数 个:个位为0时,后面不需要考虑,只需考虑前面,因为0比4小,所以前面即使取到最大也不会过限,所以前面可以是1~203(因为当前位是0,所以前面不能是0)。一共203种。 十:十位为0时,前面取1原创 2016-02-29 22:58:34 · 1972 阅读 · 1 评论 -
UVA - 1218 Perfect Service(树形dp)
题目链接:UVA - 1218 Perfect Service题意 有n台电脑,互相以无根树的方式连接,现要将其中一部分电脑作为服务器,且要求每台电脑必须连接且只能连接一台服务器(不包括作为服务器的电脑),求最少需要多少台电脑作为服务器。思路 典型的树形dp问题,那么我们来建立模型。 d(u,0):u是服务器,孩子是不是服务器均可 d(u,1):u不是服务器,u的父亲是服务器,原创 2016-02-28 23:27:56 · 2603 阅读 · 4 评论 -
UVA 10003 Cutting Sticks(区间dp)
题目链接:UVA - 10003 Cutting Sticks题意 给一长度为L的棍子,和n个切割点,每次切割的代价为当前的棍子的长度,问最少的总切割代价是多少。思路 典型的区间dp dp[i][j] = min(dp[i][k]+dp[k][j]+a[j]-a[i]) |i代码递推#include <iostream>#include <algorithm>#include <原创 2016-02-27 16:44:03 · 1088 阅读 · 0 评论 -
HDU 3709 Balanced Number(数位dp)
题目链接:[kuangbin带你飞]专题十五 数位DP F - Balanced Number题意 给定区间[a,b],求区间内平衡数的个数。所谓平衡数即有一位做平衡点,左右两边数字的力矩想等。思路 遍历每一位做为平衡点,进行搜索,sum保存数字乘以距离的和,若sum为0,则说明平衡。 要注意因为遍历了len次,所以0多加了len-1次。 还有个小技巧是当sum<0时就可以直接原创 2016-02-24 15:59:08 · 2888 阅读 · 1 评论 -
HDU 4507 吉哥系列故事――恨7不成妻(数位dp&好魔性的一道好题)
题目链接:[kuangbin带你飞]专题十五 数位DP J - 吉哥系列故事――恨7不成妻题意Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨原创 2016-02-24 03:32:56 · 3784 阅读 · 1 评论 -
POJ 3468 A Simple Problem with Integers(段更新的区间求和&Lazy思想&线段树)
题目链接:[kuangbin带你飞]专题七 线段树 C - A Simple Problem with Integers题意 给定n个数及m个操作。 操作分两种: 1. C a b c,表示对区间ab整体全部加上c 2. Q a b ,对区间ab求和并输出。思路 看到段更新,第一反应是给点更新外面加个for,但显然不可行。 了解到有个Lazy思想,即记录每一个线段树原创 2016-02-23 22:03:32 · 1416 阅读 · 1 评论 -
HDU 1754 I Hate It(区间最值问题&线段树)
题目链接:[kuangbin带你飞]专题七 线段树 B - I Hate ItTime Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,原创 2016-02-23 17:53:45 · 1254 阅读 · 0 评论 -
HDU 1166 敌兵布阵(区间求和&(线段树|树状数组))
题目链接:[kuangbin带你飞]专题七 线段树 A - 敌兵布阵前言 最近看到有些大牛代码里有句 ios_base::sync_with_stdio(false); 不免好奇,百度了下,才知道是可以加快io操作时间。 cin,cout速度慢,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段ios_base::sync_with_stdio(false)可以来打原创 2016-02-23 14:46:49 · 1375 阅读 · 0 评论 -
FZU 1686 神龙的难题(重复覆盖问题&舞蹈链)
题目链接:[kuangbin带你飞]专题三 Dancing Links D - 神龙的难题题意Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就要有一些人出来守护居民们不被魔物侵害.魔法使艾米莉就是这样的一个人.她骑着她的坐骑,神龙米格拉一起消灭干原创 2016-02-22 01:54:36 · 1890 阅读 · 1 评论 -
ZOJ 3209 Treasure Map(精确覆盖问题&舞蹈链)
题目链接:[kuangbin带你飞]专题三 Dancing Links B - Treasure Map题意 给一矩形和k个小矩形,问选取最小数量为多少的小矩形可以对大矩形进行精确覆盖。思路 仍然是个模版题,把二维的n*m的大矩形看作是一维的n*m的一条线。k个小矩形同理,那么就转化成01矩阵精确覆盖的问题了。代码#include <iostream>#include <algorit原创 2016-02-21 18:50:13 · 1645 阅读 · 0 评论 -
HUST 1017 Exact cover(舞蹈链&不能为了ac而ac)
题目链接:[kuangbin带你飞]专题三 Dancing Links A - Exact cover题意 给定一01矩阵,问是否能够精确覆盖(就是选取任意行,这些行的1所在的列互不冲突且完整覆盖所有列),若有输出行号(要按递增顺序输出),否则输出NO。思路ps:两个礼拜前大略看了下舞蹈链(虽然英文名听起来更高端,但还是更喜欢它的中文名字),很妙但也让人一看就惰性必生不愿再看,今天耐心再仔细理原创 2016-02-21 02:29:11 · 2427 阅读 · 2 评论 -
HDU 4513 吉哥系列故事――完美队形II(Manacher)
题目链接:[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher V - 吉哥系列故事――完美队形II题意 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] … h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1、挑出的人原创 2016-02-19 12:55:32 · 6835 阅读 · 0 评论 -
HDU 3068 最长回文(Manacher)
题目链接:[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher题意 给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等思路 用特殊字符插入到s串中每两个字符中间,实现每个回文串都是奇数,再用manacher算法进行求解。代码#include <iostream>#原创 2016-02-19 12:45:08 · 1664 阅读 · 0 评论 -
HDU 3652 B-number(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP G - B-number题意 求1~n的范围里含有13且能被13整除的数字的个数。思路 首先,了解这样一个式子:a%m == ((b%m)*c+d)%m; 式子的正确是显然的,就不证明了。 那么判断数是否可以被13整除就可以分解为一位一位进行处理。 当然,我们也只需要储存取余后的值。 dfs(len, num,原创 2016-02-18 18:19:41 · 5177 阅读 · 2 评论 -
POJ 3252 Round Numbers(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers题意 给定区间,求转化为二进制后其中0比1多或相等的数字的个数。思路 将数字转化为二进制进行数位dp,因为一个二进制数的最高位必须为1,所以设置变量first记录前面位是否有1,若有1,则可任意放,否则,只可放1。 同时,上面的判断决定了搜索时len的大小与二进制本身的长度不一定相等,所以需两个原创 2016-02-14 23:25:10 · 1867 阅读 · 0 评论 -
HDU 3555 Bomb(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP D - Bomb题意 求1~n的范围里含有49的数字的个数。思路 记忆化搜索 dfs(len, pre, flag) len表示当前位数 pre==0 不含49且上一位不为4 pre==1 不含49且上一位为4 pre==2 含49 flag表示是否可以任意取值(判断范围)。 即可原创 2016-02-14 22:01:09 · 1936 阅读 · 0 评论 -
HUST 1010 The Minimum Length(最小循环节)
题目链接:[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher F - The Minimum Length题意 有一个字符串A,假设是”abcdefg”,由A可以重复组成AAA,即”abcdefgabcdefgabcdefg”,从中截取一部分(至少包含一个以上完整A)为B。 现给出字符串B,求A最短的长度。思路 因为是重复组成的,所以abcd==bc原创 2016-02-14 00:54:17 · 1793 阅读 · 0 评论 -
HDU 2089 不要62(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP C - 不要62题意 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 不吉利的数字为所有含有4或62的号码。例如: 62315 73418 88原创 2016-02-14 00:04:25 · 2133 阅读 · 0 评论