2018年十月水题总结
10月和11月主要是DP和图论,稍微去CF做做杂题提高思维活跃度和代码能力,预计12月和1月是数据结构和数学,二月及以后是字符串,现在还是把基础打牢吧,不能像高中那样畸形发育了。
2018.10.31
POJ 1273 网络流 模板题,计导课看一本翻译的很烂的书看不下去了水了一道题
发现一个网络流专题:网络流24题 水了几道
网络流(1/24)飞行员配对方案问题 裸的二分图
网络流(2/24)似乎是个结论的贪心,之前在BZOJ上做过的来着。网络流的做法是求完平均值之后建一个超级源点和汇点,然后少的向源点要,多的向汇点发,这两个不要钱,相邻的点还有1和n之间连边,费用为1,最大流不限,跑一边最小费用流。
网络流(3/24)软件补丁问题 用SPFA进行转移的状压DP,状态是当前剩余的病毒,和网络流半毛钱关系没有。
网络流(4/24)魔术球问题:看着像贪心,写了一下贪心居然过了,查了题解看到网络流的做法貌似就是一个花里胡哨的贪心。
网络流(5/24)孤岛营救问题:压缩钥匙的状态BFS,用vis[x][y][sta]x,y位置,钥匙有sta时有没有到过,记录每个位置的钥匙,还有往边上走有没有墙。
坑人的专题,做完之后除了网络流,其他全会了。
2018.10.30
今天去USACO逛了一下,体验极差,感觉给测试数据是唯一令人欣慰的地方,可能是我英语不好吧。USACO现在做到的题太水了,就不写上来了。。浪费了一些时间。
NOIP2016换教室 Floyd跑出所有教室间的最短路供查找 dp[i][j][0/1]表示考虑到第i个课,还剩j次机会,0表示不换,1表示换(但是不一定成功)的期望。
转移方程dp[i][j][0] = min(dp[i-1][j][0]+dist[C[i-1]][C[i]],(dp[i-1][j][1]+dist[C[i]][C[i-1]])*(1-K[i-1])+(dp[i-1][j][1]+dist[C[i]][D[i-1]])*K[i-1]);
dp[i][j][1] = min(dp[i-1][j-1][0]+dist[C[i-1]][C[i]]*(1-K[i])+dist[C[i-1]][D[i]]*K[i]+(dp[i-1][j-1][1]+dist[C[i-1]][C[i]])*(1-K[i-1])*(1-K[i])+(dp[i-1][j-1][1]+dist[C[i-1]][D[i]])*(1-K[i-1])*K[i]+(dp[i-1][j-1][1]+dist[D[i-1]][C[i]])*K[i-1]*(1-K[i])+(dp[i-1][j-1][1]+dist[D[i-1]][D[i]])*K[i-1]*K[i]);
看着挺累人,但是一遍写出来没出问题,就是被double卡了一下,这道题是回寝室写的,可能在图书馆脑子和手会被冻住转不起来,回寝室暖和了就回到了正常水平,怪不得毛子那么厉害
洛谷P4147 求最大子矩阵的板子题,跟着复习了一下单调栈和悬线法,有关方法详见 https://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html
感觉洛谷真的友好,做着一点也不费劲,今天主要是浪费在USACO上的时间太多了。
2018.10.29
POJ1179 Polygon 序列DP,展开成两倍,坑点在于负负得正,所以需要记录最小得分和最大得分。方程:dpmax[i][j] = max{dp[i][k]+dp[k][j]} dpmax[i][j] = max{dpmax[i][k]*dpmax[k][j],dpmin[i][k]*dpmin[k][j],dpmin[i][k]*dpmax[k][j],dpmax[i][k]*dpmin[k][j]} dpmin的同理。
POJ1178 Camelot Floyd处理骑士能走的所有点对最短路,枚举目的地,与骑士汇合点,汇合的骑士,取最小值。
ZJOI2007棋盘制作 延长边一定是越靠近根越好,两边DFS,第一遍得出每个点往下最大的深度deep[],第二次传一个深度dep,在这个点需要延长的长度即为deep[now]-dep,加到答案里,然后访问所有子节点,访问时候传下去dep-边长-(deep[now]-dep) = deep[now]-边长。
ZJOI2007棋盘制作,横着统计一遍,竖着统计一遍最大子矩阵。
WA真的蛋疼,机考弱智题WA了个爽,我是个弱智。今天又WA了一晚上。
2018.10.28及以前
好久没有做算法竞赛的题目了,最近才开始捡,是想为明年的校赛做点准备的。感觉现在自己虚的不行啊,先不说思维能力,好多小细节现在都注意不到导致WA好多次。
大概总结下这两天水的题目吧,之后难度会一点点上升的。(其实是想提高英语阅读速度)
CF1064B 求 a−(a⊕x)−x=0a−(a⊕x)−x=0 的解的个数,按位考虑,发现当前位为0,答案不变,为1,答案乘二,统计。
CF1066B 一排屋子排成一个数组,其中某几个位置有加热器,每个加热器都可以加热一个固定的范围,打开最少的加热器加热所有房间。每个屋子优先考虑使用能管到它的最右面的加热器,
如果右边没有,就用左面最靠右的加热器,要是还没有。。GG。
CF1066C q个操作/查询,把一本编号为id的书放在最左边或最右边,询问把编号为id的书拿出来最少先拿出来左边或右边的几本书。其实就是一个数轴,记下坐标。
CF1066D m个大小为k的箱子,一排n个物体从左到右想要装进箱子里,装不进去就丢掉最左边的,问最多装几件。二分。
CF1066E 给了两个巨大的二进制数a和b,不停的将答案加上a&b然后将b向右移动一位,输出答案取模,考虑a的每一位&了b中多少个1然后把总和加起来就是答案,前缀和统计b从高位到低位1的个数。
CF1070F 两个人辩论选观众,有4种人分别支持双方,最终选出来支持任意一方的人都要过半,每个观众有影响力,选出来一些观众最大化影响力。11的全都要,10和01的排序后要相同的最多人数,剩下的
和00的放在一起排序,选出来不超过11的人数。
CF1073C 一个机器人每次只能向上下左右的某个方向走一步,给了一个走路的指令序列,可以修改一些来使机器人走到目的坐标,问修改序列的标号最大的减去最小的是多少。指令序列长小于要走的曼哈顿距离或者减去曼哈顿距离是个奇数就走不过去。
二分答案判断即可。
CF1031B 分别枚举两位情况判断
CF1016B 给两个字符串s和t,每次询问s中l到r出现了几个t。kmp加前缀和,求的时候注意r-t.length+1和l的关系。
CF2016C 给一个两行很多列的格子,从左上角走,每个格子恰好经过一次,每个格子得分为它的分数乘以到达的时间,求最大得分。发现路径是蛇形和环形相结合。开四个前缀和,预处理蛇形从左向右,顺时针环形和逆时针环形从右向左,竖排的从右向左
的前缀和数组,枚举蛇形走的位置计算。注意开long long。
完全是在练习英语
感觉断档了,更难的题目现在思考起来有些困难,可能还是要继续适应。
不知道为什么,每次CF比赛的时候这边就连不上。还是老老实实做VT吧。
明天第一次机考,感觉要跪。