腾讯编程马拉松初赛的整理

为什么要叫做变成马拉松那···?明明是acm嘛,很无力的学习了一下算法知识,结果止步于复赛,本想很快的做一下整理,结果中途赶上清明节LOL大赛,于是乎组了个队去参加,到了比赛地点却因为举办方不利,没有达成,那个网吧明明就是民房改的嘛,搞毛?网速还没宿舍快,就这条件还好意思来当主办方,简直是莫名其妙,草草打了两局,出门看到“预祝LOL工大赛成功”的横幅,不禁蛋疼。

 

//==============================================我是初赛的分割线=========================================================

模拟

小Q系列故事——屌丝的逆袭

这题就是简单的模拟,给定一个矩阵,遍历每一个点求每个点的分数,此分数只与该点周围的点有关。

小Q系列故事——电梯里的爱情

就是一定规则下,电梯要把电梯里的人送到目的地需要用多长时间,简单模拟即可。

湫湫系列故事——减肥记II

给出多个时间段,求出当天剩余的时间是多少。因为n很大500000,直接硬来要超时。
所以我门把每个事件的开始和结束标记,遍历每一分钟遇到事件开始flag++,事件结束flag--,flag为0的时候是空闲时间。

小Q系列故事——为什么时光不能倒流

某一时间的之后多少秒是什么时候,仅限于时钟上的显示,主要是处理好输出格式的问题。

小Q系列故事——世界上最遥远的距离

某一天向前N天向后N天的日期,主要是处理好平年闰年的问题。

小小明系列故事——游戏的烦恼

先统计(0,0)到(n,m)点的个数,然后便可以用o(1)的复杂度求出,矩阵中任意一个矩形中的点的个数。

小Q系列故事——最佳裁判

直接求平均数,一个个比一下就可以。

威威猫系列故事——过生日

题目要求n边型切p刀是否能变成一个m边型,首先n>m的时候一刀就可以解决问题。如果n<m的时候,n+p>=m 就可以解决。
需要用到高精度的处理。

小明系列故事——玩转十滴水

大家都经常玩的十滴水的小游戏,按时间模拟就可以AC

搜索

小明系列故事——捉迷藏

就是一个矩阵中,每次走一格,找到两个目标的最短时间。不过这里加了一点,在同行同列中间没有障碍物就算看到。
预处理一下矩阵,把能看到的位置都进行标记就可以了。

动归

小明系列故事——买年货

简单的三维背包问题。dp[i][j][k][l]代表  到第i件商品剩余j元钱,k积分,l次免费机会的最大价值,可用滚动数组优化。

吉哥系列故事——临时工计划

是一个每个任务有开始结束时间,求最优任务安排的问题。先按任务的结束时间排序,dp[i][j]代表前i个任务在j天前结束的最优方案。
时间为o(nlgn)+o(nm)


威威猫系列故事——篮球梦

这题就是很简单的一个动归,dp[i][j]维护时间和分数就可以了。

湫湫系列故事——减肥记I

简单的二维背包,dp[i][j]代表第i个食物,j点卡路里的,最大幸福度。

吉哥系列故事——完美队形I

是一个最大共同递增子序列问题,把当前队列倒序求LCIS,数据量不算特别大,使用o(n^3)的算法也可以解决。

吉哥系列故事——完美队形II

这题是找一个字符串中的回文子串,只不过是加了一点要求,使用manacher算法便可以解决,这个算法不能算是动态规划,
但也用到了存储状态的思想,类似DP。

 威威猫系列故事——拼车记

简单的贪心问题,f[i][j]表示第i辆车,还有j个人的最少花费。

 郑厂长系列故事——N骑士问题

因为棋盘很小骑士的摆放只影响到下两行,所以明显是一个状态压缩的DP问题,难点在于位运算的非法判断。

吉哥系列故事——恨7不成妻

这道题其实是一个数位DP问题,其实说实话数位DP我是不大会,但是此类问题通常是求[L,R]中符合条件的数,而且这个LR通常很大
不好模拟。这时候采用安位DP的方法。
dp[i][d][u][a][b][3], 表示考虑到第i位,d表示是否曾大于下界,u表示是否曾小于上界,a表示从最高位到当前位的各个位数字之和模7等于a,b表示最高位到当前位的真实值模7等于b。数位DP时要注意上结合下界的问题,就是DP的那个数字是否超过LR。
dp[i+1][d|(x>l[i])][u|(x<r[i]][(a+x)%7][(b+x*10^k)%7]转移是这样。

并查集

湫湫系列故事——设计风景线

这题其实就是一个简单的并查集,理解题意方面才是比较困难的地方,其实就是统计包含最长路径的连同子块,
和判断环就好。

数学

湫湫系列故事——植树节

就是一个数论问题,推出公式很简单,可惜我不会推~~~~(>_<)~~~~ 。

小明系列故事——师兄帮帮忙

根据题意很快可以推出公式,但要注意需要使用快速幂来做处理,要不然会超时。

威威猫系列故事——吃鸡腿

根据题意抽象出公式 sum(i)*(k1+k2) = sum(i+1)  在sum大于k的时候结束,需要注意一点的事,使用int64可能会发生溢出,
需要使用double才可以。

威威猫系列故事——因式分解

 这个题就是很恶心的题,枚举系数因子硬做应该能做出来。⊙﹏⊙b。


AC自动机

其实说实话我没有写过自动机,这段内容纯属凭空臆断。

小明系列故事——女友的考验

这个是,在二维坐标上给定n个点,只能从小编号点走向大编号点,再给定m个路径,要求不经过这些路径走到n点的最小长度。
先用不可走路径构造一个trie,问题就变成了从n中找最短总长度子串,不包含在trie中的字符串。
维护dp[i][j]代表到达节点i,在trie树中到达节点j,每次转移是i节点之后的节点,j随之变化,如果trie树种到达单词结尾节点,则抛弃该状态。

吉哥系列故事——最终数

好吧这题貌似是AC自动机加数位DP,完全在我的理解范围之外。~~~~(>_<)~~~~ 

贪心

郑厂长系列故事——体检

这个题就是简单地贪心,读懂题意基本上就会贪心了,没什么好说的。

郑厂长系列故事——逃离迷宫

也是读懂题意就能贪的那种。

线段树

小明系列问题——小明序列

 其实这是一道最大递增子序列的升级版,需要两两数据之间距离超过D,通常动归是在o(n^2),这题会超时

一般最大递增子序列o(nlgn)的算法是维护一个一位数组,记录之前出现长度为i的字串的最小结尾数字,然后二分。

这题需要一个线段树来使算法到达o(nlgn),存储值为i并且以其结束的字串长度,这样就可以查找[n,m]之间的最长的递增子串。

图论

湫湫系列故事——过年回家

 简单的最短路。

你可能感兴趣的:(腾讯编程马拉松初赛的整理)