03 2017 档案

摘要:二分图最大匹配,枚举。 可以计算出每一个位置可以放哪些数字,每个数字可以放在哪些位置,这样就可以建二分图了。 如果二分图最大匹配不到$n$,则无解。否则构造字典序最小的解,可以枚举每一位放什么数字,然后再判断是否有解。 阅读全文
posted @ 2017-03-31 19:14 Fighting_Heart 编辑
摘要:二分图的最小点权覆盖。 非常感谢巨巨@islands_的解答,还帮我画了一个图。 题目保证给出的边构成的图是一个二分图。 如果没有第三种类型的$frog$,那么问题就很简单了。即选择哪些点,覆盖住所有的边,并且要求选择的点的权值之和最小。可以转换成网络流来解决。 现在有第三种类型的$frog$,可以 阅读全文
posted @ 2017-03-31 16:03 Fighting_Heart 编辑
摘要:最长上升子序列,枚举。 因为$10000$最多只有$10$个,所以可以枚举采用哪一个$10000$,因为是一个环,所以每次枚举到一个$10000$,可以把这个移到最后,然后算从前往后的$LIS$和从后往前的$LIS$,然后枚举一下哪里断开就可以了。 阅读全文
posted @ 2017-03-30 21:50 Fighting_Heart 编辑
摘要:二分。 先看个位上会发生几次进位,把每个数对$10$取余后排序,对每个数寻找有个数字和他相加会大于$10$,就有几次进位。然后继续处理十位,百位...... 阅读全文
posted @ 2017-03-30 20:45 Fighting_Heart 编辑
摘要:模拟。 每次找一下即将要遇到的那个点,这个数据范围可以暴力找,自己的写的时候二分了一下。如果步数大于$4*n$一定是$-1$。 阅读全文
posted @ 2017-03-30 20:42 Fighting_Heart 编辑
摘要:$KMP$,链表。 将$p$弄成链表,每次匹配到,删掉中间的,继续匹配。 阅读全文
posted @ 2017-03-30 20:40 Fighting_Heart 编辑
摘要:$BFS$。 如果$1$和$n$之间存在一条长度为$b$的边,那么还需要去计算只走长度为$a$的边的最小时间。 如果$1$和$n$之间存在一条长度为$a$的边,那么还需要去计算只走长度为$b$的边的最小时间。 第一种情况直接$BFS$即可。 第二种情况需要反过来思考,因为补图的边太多了,对于$BFS 阅读全文
posted @ 2017-03-30 20:26 Fighting_Heart 编辑
摘要:斯坦纳树,$dp$。 先求出每个状态下连通的最小花费,因为可以是森林,所以$dp$一下。 阅读全文
posted @ 2017-03-29 13:02 Fighting_Heart 编辑
摘要:斯坦纳树。 最后可以是森林,在计算出每个联通状态的最小费用后,还需要进行一次$dp$。 阅读全文
posted @ 2017-03-29 10:18 Fighting_Heart 编辑
摘要:最短路,三进制状态压缩。 $dis[i][j]$表示到$i$节点,每个中介用了几次的情况下的最小花费,跑最短路即可。 阅读全文
posted @ 2017-03-28 18:17 Fighting_Heart 编辑
摘要:暴力,打表。 计算出每一个数的因子之和,可以枚举$i$,让后将$i$的倍数都加上$i$。发现这样的只有$71$对,然后暴力就可以了。 阅读全文
posted @ 2017-03-28 18:15 Fighting_Heart 编辑
摘要:$map$,简单模拟。 阅读全文
posted @ 2017-03-28 18:11 Fighting_Heart 编辑
摘要:$dfs$。 记录一下每一个节点的深度就可以了。 阅读全文
posted @ 2017-03-28 18:10 Fighting_Heart 编辑
摘要:最短路。 记录一下到某个点,最后是哪辆车乘到的最短距离、换乘次数以及从哪个位置推过来的,可以开$map$记录一下。 阅读全文
posted @ 2017-03-23 09:47 Fighting_Heart 编辑
摘要:枚举,二分,$RMQ$。 肯定是将连续一段中最大值免去花费,枚举起点之后,二分终点即可。可以证明单调性。 阅读全文
posted @ 2017-03-22 18:50 Fighting_Heart 编辑
摘要:线段树。 处理出每个位置下一个位置是哪里。然后搞个线段树找一下最大值就可以了。 阅读全文
posted @ 2017-03-22 18:49 Fighting_Heart 编辑
摘要:AVL树的插入,旋转。 阅读全文
posted @ 2017-03-22 16:06 Fighting_Heart 编辑
摘要:最短路。 先求出一个只包含最短路的$DAG$,然后在$DAG$上$dp$一下就可以了。英文变数字还有$map$转一下。 阅读全文
posted @ 2017-03-22 16:05 Fighting_Heart 编辑
摘要:最短路。 枚举垃圾箱放哪里,然后算最短路。 阅读全文
posted @ 2017-03-22 16:04 Fighting_Heart 编辑
摘要:树状数组,二分。 一堆数字,可以删除栈顶,压入数字,求中位数,可以线段树,也可以树状数组上二分。 阅读全文
posted @ 2017-03-22 16:03 Fighting_Heart 编辑
摘要:$01$背包,路径记录,贪心。 可以将物品从大到小排序之后进行背包,同时记录路径。 阅读全文
posted @ 2017-03-22 16:02 Fighting_Heart 编辑
摘要:贪心,树状数组,二分。 每次找一个比自己大一点点的值,树状数组上二分即可。 阅读全文
posted @ 2017-03-22 16:01 Fighting_Heart 编辑
摘要:最短路。求出一个最短路的$DAG$,然后在$DAG$上$dp$即可。 阅读全文
posted @ 2017-03-22 16:00 Fighting_Heart 编辑
摘要:数组模拟堆。 阅读全文
posted @ 2017-03-22 15:59 Fighting_Heart 编辑
摘要:枚举,$BFS$,连通块缩点。 可以枚举一开始染哪个位置,然后逐层往外染色,看最多需要多少操作次数,也就是算最短距离。连通块缩点之后可以保证是一个黑白相间的图,且每条边的费用均为$1$,$BFS$即可。 阅读全文
posted @ 2017-03-16 21:41 Fighting_Heart 编辑
摘要:状态压缩,$dp$。 要计算期望,期望等于概率的倒数,事实上也就是要计算方案数,可以利用状态压缩$dp$,$dp[s][m]$表示状态$s$下,取得$m$价值的方案数,转移即可。 阅读全文
posted @ 2017-03-16 21:38 Fighting_Heart 编辑
摘要:暴力枚举。 枚举最小的那个数字,不会超过$1000$,剩下的两个数字根号的效率枚举一下即可。 阅读全文
posted @ 2017-03-14 19:26 Fighting_Heart 编辑
摘要:暴力。 题目只要求计算边上的点就可以了,一开始没看清题意,把内部的也算进去了。内部的计算可以延迟标记一下,但这题没有必要。 阅读全文
posted @ 2017-03-14 19:21 Fighting_Heart 编辑
摘要:2147: 07染色带谜题 题目描述 现在给你一个长为N的染色带,有M种颜色,标号分别为0,1,2,…,M-1,染色带初始的颜色为标号0,现在对它进行K次操作,第i次操作,是对染色带的[Li,Ri]区间染上第Si种颜色(即把这段区间原来的颜色给覆盖掉),最后问你染色带进行这么多次操作后染色带上有几种 阅读全文
posted @ 2017-03-13 20:17 Fighting_Heart 编辑
摘要:位运算,枚举。 按按分开计算,枚举$?$是$0$还是$1$,分别计算出$sum$,然后就可以知道该位需要填$1$还是$0$了。 阅读全文
posted @ 2017-03-12 20:22 Fighting_Heart 编辑
摘要:二分。 二分一下答案,然后验证一下删去那些位置之后,$t$串还是否是$s$的子序列。 阅读全文
posted @ 2017-03-12 20:21 Fighting_Heart 编辑
摘要:贪心。 如果这周便宜,那么肯定这周买。另外要求这周至少买到$k$个,那么肯定是需要额外购买差价小的。 阅读全文
posted @ 2017-03-12 20:20 Fighting_Heart 编辑
摘要:简单题。 删去结尾的不是$0$的数字,保证结尾连续的$k$个都是$0$,如果不能做到,就保留一个$0$。 阅读全文
posted @ 2017-03-12 20:19 Fighting_Heart 编辑
摘要:简单题。 因为需要连边的人的个数一样,又要保证和一样,所以必须每个数字的个数都是一样的。 阅读全文
posted @ 2017-03-12 20:18 Fighting_Heart 编辑
摘要:优先队列。 每次将$n$个人压入优先队列,取出$5$个,最后排序。 阅读全文
posted @ 2017-03-08 11:51 Fighting_Heart 编辑
摘要:求连通块。 $ABC$之间建好边,然后计算连通块的个数。 阅读全文
posted @ 2017-03-08 11:49 Fighting_Heart 编辑
摘要:暴力搜索。 按照能配对的关系建立有向边,然后暴力搜索。 阅读全文
posted @ 2017-03-08 11:48 Fighting_Heart 编辑
摘要:$dp$,大数运算。 $dp[i][j]$表示到$i$位置切成了$j$段的最大收益。数字爆$longlong$,$Java$上大数。 阅读全文
posted @ 2017-03-08 11:47 Fighting_Heart 编辑
摘要:$dp$。 $dp[i]$记录铺满$3*i$的方案数。最后两列铺了$1$个$2*2$的和两个$1*1$的,或者是最后$1$列铺了$3$个$1*1$的。 因此$dp[i]=dp[i-1]+dp[i-2]*2$。 阅读全文
posted @ 2017-03-08 11:43 Fighting_Heart 编辑
摘要:$dp$。 设$dp[i][j]$为到$i$位置,切成了$j$段的最大收益,然后枚举一下$f$,$dp[i][j]=max(dp[f][j-1]+v[f+1][i])$。一段区间的价值可以用区间$dp$求得。 阅读全文
posted @ 2017-03-08 11:40 Fighting_Heart 编辑
摘要:模拟题。 阅读全文
posted @ 2017-03-07 20:40 Fighting_Heart 编辑
摘要:网络流。 $s$向每一个$r[i]$连边,容量为$r[i]$。 每一个$r[i]$向每一个$c[j]$连边,容量为$k$。 每一个$c[j]$向$t$连边容量为$c[j]$。 跑最大流,中间每一条边上的容量就是那一个格子所填的数字。 唯一性判定:如果残留网络上有环,那么不唯一。 阅读全文
posted @ 2017-03-07 20:38 Fighting_Heart 编辑
摘要:$dfs$缩点,树形$dp$。 首先将连通块缩点,缩点后形成一个黑白节点相间的树。接下来的任务就是寻找一个$root$,使这棵树以$root$为根,树的高度是最小的(也就是一层一层染色)。树形$dp$可以解决这个问题,第一次$dfs$处理子树,第二次$dfs$枚举$root$计算答案。 阅读全文
posted @ 2017-03-05 15:10 Fighting_Heart 编辑
摘要:好久没写线段树了,这题作为一个回味.. 第一种操作的话,就是一个延迟标记。 第二种操作可以暴力更新下去,但是有一个优化,如果某区间内所有值都是一样的,或者最大值和最小值相差1,那么到此结束,不要继续往下面更新了。 这样一来的话,pushDown的时候要注意一下,如果该区间内所有值都一样,或者最大值和 阅读全文
posted @ 2017-03-05 15:09 Fighting_Heart 编辑
摘要:现场写的代码,比较乱..... $1$.[分值:$5$] $5-11$ 编程打印空心字符菱形 模拟一下下即可 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<set> 阅读全文
posted @ 2017-03-03 08:27 Fighting_Heart 编辑