为什么要叫做变成马拉松那···?明明是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]之间的最长的递增子串。
图论
湫湫系列故事——过年回家
简单的最短路。