10 2016 档案

摘要:先从阿里机器学习算法岗网络笔试题说起:甲乙两人进行一个猜硬币的游戏。每个人有一个目标序列,由裁判来抛硬币。谁先得到裁判抛出的一串连续结果,谁赢。 甲的目标序列是正正正,乙的目标序列是反正正。那么如果裁判抛出了正正反正反正正....抛到第7个结果时乙胜,因为最后三个序列是“反正正”,而前面不存在甲的“ 阅读全文
posted @ 2016-10-31 22:53 我在地狱 阅读(977) 评论(0) 推荐(0)
摘要:题意: Description 终于放寒假了,小明要和女朋友一起去看电影。这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则: 1、假设小明在的位置是1号点,女朋友在的位置是n号点,则他们之间有n-2个点可以走,小明每次走的时候只能走 阅读全文
posted @ 2016-10-30 00:56 我在地狱 阅读(224) 评论(0) 推荐(0)
摘要:题意:给出n个资源,m个病毒,将资源串拼接成一个串,必须包含所有的资源串,可以重叠,但是不能包含病毒,问最小的长度为多少 题解:所有串建AC自动机。对以资源串结尾的结点跑bfs,求出到其他资源串结尾的最小距离。当前结点的fail结点不能入队列,因为当前结点读下一个字符可能会遇到禁止字符串,而fail 阅读全文
posted @ 2016-10-29 23:09 我在地狱 阅读(234) 评论(0) 推荐(0)
摘要:dp[i][j]表示走了i步走到j结点的概率。初始值dp[0][0] = 1.当走到的结点不是单词尾结点时,才能走过去。 !end[i]&&last[i] == root时,该结点才可行。 丢掉last数组, end[i] |= end[ fail[i] ]即可。 表示i节点是某些禁止字符串的后缀。 阅读全文
posted @ 2016-10-27 21:47 我在地狱 阅读(214) 评论(0) 推荐(0)
摘要:题意:n个空房间。两种操作:1.选择最小的连续D个房间入住,并输出这连续D个房间的最小标号。2.将某个区间内的房间全部退房。 后记:这也是线段树一经典题。不难。 主要是通过这种写法可以O(logn)的时间内完成离散化查询。不过平时一般都是二分+树状数组O(lognlogn)完成离散化查询。 阅读全文
posted @ 2016-10-27 11:18 我在地狱 阅读(247) 评论(0) 推荐(0)
摘要:题目链接 题意:一个只含e, a, s, y的字符串,问[l, r]内有多少个easy序列? 题解:倍增。 阅读全文
posted @ 2016-10-26 22:03 我在地狱 阅读(316) 评论(0) 推荐(0)
摘要:HDU5925 题意:给出一个R*C(R, C <= 1e9)的地图,地图上有n(n <= 200)个点的障碍,其余为空地。问有多少个四连通图以及各个四连通图的大小。 题解:离散化。将x, y坐标分别离散化。对于xi点再插入xi-1, xi+1两个点。 则离散化后的权值大小为xi-xi-1.对y作同 阅读全文
posted @ 2016-10-25 23:20 我在地狱 阅读(471) 评论(0) 推荐(0)
摘要:DP+bitset HDU5716 dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset 1 #include <bits/stdc++.h> 2 #define X first 3 #define Y second 4 #define mp 阅读全文
posted @ 2016-10-25 19:41 我在地狱 阅读(228) 评论(0) 推荐(0)
摘要:题意:一条直线上有n个炸弹,给出每个炸弹的爆炸半径,可以引爆另一个炸弹爆炸。问:每个炸弹爆炸后,最多有几个炸弹一起爆炸? 迭代,用线段树更新。 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #define ll 阅读全文
posted @ 2016-10-25 14:39 我在地狱 阅读(275) 评论(0) 推荐(0)
摘要:题目链接 题意:n个人,每个人有一个能力值。给出m组关系A, B, 表示A的能力值大于B的能力值。 问:m组关系中是否有自相矛盾的?若不矛盾,问:第1个人在所有人的能力值中排名第几?有多少人的能力值的排名可以确定? 题解:拓扑排序。存两个图,原图与反图。 若原图可达该点数+反图可达该点数-1 = n 阅读全文
posted @ 2016-10-21 23:40 我在地狱 阅读(152) 评论(0) 推荐(0)
摘要:题意:N个点的一棵带权树。切掉某条边的价值为切后两树直径中的最大值。求各个边切掉后的价值和(共N-1项)。 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表示切掉以i为根的子树后的直径。 第一遍dp,记录 down[][0]:从i结点向下的最大距离 dow 阅读全文
posted @ 2016-10-19 01:26 我在地狱 阅读(508) 评论(0) 推荐(0)
摘要:某次投了阿里算法岗玩,有一道题是这样的: 某张试卷有20题,做对一个得5分,做错一个得-3分,不做得0分。问:最后得分有几种情况? 随便写个程序暴力算一下即可。 那么如果范围比较大应该怎么办? 今天看《组合数浅谈》(王连笑著,哈尔滨工业大学出版社)里有讲解法。 设有n道题,评分标准如下:每道题答对得 阅读全文
posted @ 2016-10-18 21:22 我在地狱 阅读(291) 评论(0) 推荐(0)
摘要:题意:给定n个数字,你可以从中选出一个数A(不能对该数进行修改操作),并对其它数减小至该数的倍数,统计总和。问总和最大是多少? 题解:排序后枚举每个数作为选出的数A,再枚举其他数, sum += a[i]-a[i]%A;复杂度为O(n^2), 爆炸。 显然应该降至O(nlogn). 枚举每个数a[i 阅读全文
posted @ 2016-10-16 21:14 我在地狱 阅读(306) 评论(0) 推荐(0)
摘要:题意:给一个序列,可以进行若干次操作,每次操作选择一个数让它+1或-1,问最少要几次操作使得序列变为严格单调递增序列。 题解:首先考虑非严格递增序列,则每个数字最终变成的数字一定是该数组中的某个数。那么O(n^2)复杂度dp一下即可。 dp[i][j]表示第i个数变成第j小的数,dp[i][j] = 阅读全文
posted @ 2016-10-16 14:31 我在地狱 阅读(428) 评论(0) 推荐(0)
摘要:题目链接 题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2? 题解:树形dp,两遍dfs,第一遍dfs求得以各个结点为根的子树的结点数,以及各个结点下面切掉某条边后最多可切出多少个结点; 第二遍dfs求得每 阅读全文
posted @ 2016-10-14 15:14 我在地狱 阅读(487) 评论(0) 推荐(0)
摘要:数组A包含N个整数(可能包含相同的值)。设S为A的子序列且S中的元素是递增的,则S为A的递增子序列。如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS)。A的LIS可能有很多个。例如A为:{1 3 2 0 4},1 3 4,1 2 4均为A的LIS。给出数组A,求A的LIS有多 阅读全文
posted @ 2016-10-14 00:19 我在地狱 阅读(454) 评论(0) 推荐(0)
摘要:题意:给你n点m边的图,然后让你确定每条边的方向,使得入度=出度的点最多 。 度数为偶数的点均能满足入度 = 出度。 证明:度数为奇数的点有偶数个,奇度点两两配对连无向边,则新图存在欧拉回路,则可使新图所有点入度 = 出度。 1 #include <bits/stdc++.h> 2 using na 阅读全文
posted @ 2016-10-11 21:43 我在地狱 阅读(190) 评论(0) 推荐(0)
摘要:以下这份代码并没有过。但感觉没有问题。不是蜜汁WA就是蜜汁T。 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 typedef long long ll; 6 using 阅读全文
posted @ 2016-10-10 23:10 我在地狱 阅读(303) 评论(0) 推荐(0)
摘要:题目链接 题意:给定两个长度为n的数组a与长度为m的数组b, 给定一个操作符op满足 x op y = x < y ? x+y : x-y. 有q个询问,每次给出询问c,问:有多少对(i, j)满足a[i] op b[j] = c ? 0 <= c <= 100000, 其余数据范围在[0, 500 阅读全文
posted @ 2016-10-06 22:45 我在地狱 阅读(373) 评论(0) 推荐(0)
摘要:题意:dp[n] = ∑ ( dp[n-i]*a[i] )+a[n], ( 1 <= i < n) cdq分治。 计算出dp[l ~ mid]后,dp[l ~ mid]与a[1 ~ r-l]做卷积运算。 1 #include <bits/stdc++.h> 2 using namespace std 阅读全文
posted @ 2016-10-05 22:11 我在地狱 阅读(1221) 评论(5) 推荐(0)
摘要:题意:1~n 的全排列中,有多少个排列满足任意从中间切成两段后,左边段的最大值大于右边段的最小值? 例如:n为3时有3种 2 3 1 3 1 2 3 2 1 解释:比如 2 3 1 (2) (3 1) 1比2小 (2 3) (1) 1比2小 都满足上面的条件。 3 2 1 (3)(2 1) 1比3小 阅读全文
posted @ 2016-10-04 23:32 我在地狱 阅读(568) 评论(0) 推荐(0)