随笔分类 -  Codeforces

摘要:"D. Buy a Ticket" 分析 建一个源点,连向所有结点,边的花费为那个结点的花费,图中原有的边花费翻倍,最后跑一遍最短路即可。 code cpp include using namespace std; const int N = 2e5 + 10; const long long IN 阅读全文
posted @ 2018-02-27 14:44 ftae 阅读(166) 评论(0) 推荐(0)
摘要:"D. New Year and Arbitrary Arrangement" 分析 $dp[i][j]$ 表示已有 $i$ 个 $a$ 和 $j$ 个 $ab$ 的情况下继续构造能得到的 $ab$ 个数的期望。 考虑 DFS 记忆化搜索。 有两个要注意的地方: 令 $p_a$ 为添加 $a$ 的概 阅读全文
posted @ 2018-02-09 00:34 ftae 阅读(228) 评论(0) 推荐(0)
摘要:"C. Perun, Ult!" 分析 首先对于每个敌人单独预处理时间线(即在什么时候可以杀死这个敌人,什么时候杀不死了),然后通过一个总时间线去更新答案。 code "E. Prime Gift" 分析 二分答案 $ans$,问题转化成小于等于 $ans$ 的有多少个数。 dfs 暴力枚举素因子构 阅读全文
posted @ 2018-01-31 21:04 ftae 阅读(170) 评论(0) 推荐(0)
摘要:"C. Python Indentation" 分析 $dp[i][j]$ 表示到第 $i$ 行时,缩进次数为 $j$ 的方案数。 code cpp include using namespace std; const int MOD = 1e9 + 7; string c; long long d 阅读全文
posted @ 2018-01-30 15:19 ftae 阅读(176) 评论(0) 推荐(0)
摘要:"C. Bipartite Segments" 分析 在题目所给出的无向图中只能存在奇数长度的环,说明任意两个环一定无公共边,否则就会出现偶数长度的环。Tarjan 算法找环。 然后预处理 $d[i]$ 表示从 $i$ 开始向右最远延伸到的位置,即 $[i, d[i] + 1]$这个区间就是不合法的 阅读全文
posted @ 2018-01-23 21:24 ftae 阅读(220) 评论(0) 推荐(0)
摘要:"D. Unusual Sequences" 分析 如果至少有一组解,则要 $y$ 被 $x$ 整除,也就是说 $a_i$ 一定是 $x$ 的倍数,可设 $dp[i]$ 为 和为 $i$ 且 $gcd = 1$ 时的方案数,首先呢,如果不考虑 $gcd$ 的限制,可以发现,$dp[i]=1 1$ 的 阅读全文
posted @ 2018-01-21 22:48 ftae 阅读(182) 评论(0) 推荐(0)
摘要:"F Clear The Matrix" 分析 题目问将所有星变成点的花费,限制了行数(只有4行),就可以往状压DP上去靠了。 $dp[i][j]$ 表示到第 $i$ 列时状态为 $j$ 的花费,只需要记录 16 位二进制,因为我们最多只能影响到 4 \ 4 的星,那么每次都是从一个 4 \ 4 的 阅读全文
posted @ 2017-12-30 23:22 ftae 阅读(137) 评论(0) 推荐(0)
摘要:" 451 Div2 F" 题意 给出一个由数字组成的字符串,要求添加一个加号和等号,满足数字无前导 0 且等式成立。 分析 对于这种只有数字的字符串,可以快速计算某一区间的字符串变成数字后并取模的值,首先从右到左,将字符串转化为数字并取模,那么 $h[i]$ 表示字符串 $S[i...len]$ 阅读全文
posted @ 2017-12-21 13:47 ftae 阅读(101) 评论(0) 推荐(0)
摘要:" 452 Div2 F" 题意 给出一个字符串, m 次操作,每次删除区间 $[l,r]$ 之间的字符 $c$ ,输出最后得到的字符串。 分析 通过树状数组和二分,我们可以把给定的区间对应到在起始字符串上的区间。 然后暴力去删字符即可(因为最多只会删掉等同于字符串长度的字符个数),总共只有 62 阅读全文
posted @ 2017-12-19 23:18 ftae 阅读(115) 评论(0) 推荐(0)
摘要:"893F Subtree Minimum Query" 题意 给出一棵树,每次询问 $x$ $k$,求以 $x$ 为根结点的子树中的结点到结点 $x$ 的距离小于等于 $k$ 的结点权值最小值。 分析 可持久化线段树,对每个结点都建树,然后尽可能复用子孙结点的线段树。 对于一般的线段树,我们并不需 阅读全文
posted @ 2017-12-13 13:51 ftae 阅读(457) 评论(0) 推荐(0)
摘要:" 448 Div2 E" 题意 给出一个数组,有两种类型操作: 1. 选定不相交的两个区间,分别随机挑选一个数,交换位置。 2. 查询区间和的期望。 分析 线段树区间更新区间求和。 既然是涉及到两个区间,那么对于第一个区间而言,它的和的期望由两部分组成:它剩下的数的和的期望,从第二个区间换过来的数 阅读全文
posted @ 2017-12-08 15:41 ftae 阅读(134) 评论(0) 推荐(0)
摘要:" 449 Div2 D" 题意 交互式类题目。 起始有 n 张纸,会给出 m 次数字 p ($1 \leq p \leq c$),每次可选择一张纸,并在纸上写上这个数字,如果纸上已经存在数字,会覆盖掉原来的数字。问不超过 m 次能否使得所有纸上都有数字且不降序排列。 分析 这类想法题挺常见的了,观 阅读全文
posted @ 2017-12-06 17:41 ftae 阅读(155) 评论(0) 推荐(0)
摘要:"891B Gluttony" 题意 给出一个数字集合 $a$,要求构造一个数组 $b$ 为 $a$ 的某个排列,且满足对于所有下标集合的子集 $S=\{x_1,x_2,...,x_k\}(1\leq x_i \leq n, 0 b_{x_j}$,那么 $\sum_{j=1}^{n k}a_{x_j 阅读全文
posted @ 2017-11-23 22:38 ftae 阅读(240) 评论(0) 推荐(0)
摘要:" 447 Div2 E" 题意 给出一个由有向边构成的图,每条边上有蘑菇,假设有 $n$ 个蘑菇,那么第一次走过这条边可以获得 $n$ 个蘑菇,第二次 $n 1$,第三次 $n 1 2$,第四次 $n 1 2 3$,后面类推,直至为 $0$。问从选定点出发最多可以获得几个蘑菇。 分析 Tarjan 阅读全文
posted @ 2017-11-22 22:10 ftae 阅读(244) 评论(0) 推荐(0)
摘要:" 447 Div2 D" 题意 给一棵完全二叉树,每条边有权值为两点间的距离,每次询问 $x, h$ ,从结点 $x$ 出发到某一结点的最短路的距离 $d$ 如果小于 $h$ ,则答案加上 $h d$ ,考虑所有结点并输出答案。 分析 通过建树过程可以发现这是一棵完全二叉树,也就是说树很矮。 可以 阅读全文
posted @ 2017-11-21 20:41 ftae 阅读(306) 评论(0) 推荐(0)
摘要:" 445 Div2 D" 题意 给出一些字符串,要求构造一个最短的且字典序最小的字符串,使得给出的字符串都为目标字符串的子串,且这些字符串作为子串出现的次数都是最多的,如果不存在目标字符串输出 "NO"。 分析 显然,每个字符只能出现一次。 然后,一个长度为 $l$ 的字符串,其实指明了 $l 1 阅读全文
posted @ 2017-11-13 13:26 ftae 阅读(273) 评论(0) 推荐(0)
摘要:"888G Xor MST" 题意 给出一个 $n$ 个点的无向完全图,结点 $i$ 有权值 $a_i$。两个结点 $i, j$ 所连边的权值为 $a_i \ xor \ a_j$。 求最小生成树边的权值之和。 分析 好题! 首先这里有 Trie 的一个经典利用,在一些数中找到一个数与某个数异或起来 阅读全文
posted @ 2017-11-12 21:46 ftae 阅读(332) 评论(0) 推荐(0)
摘要:"888E Maximum Subsequence" 题意 给出一些数字,现在选择 $k$ 个不同的下标对应的数字,问它们的和模 $m$ 最大为多少? 分析 用到了 meet in the middle 的思想,能极大的优化 DFS 的暴力。 数字的个数 $n$ 只有 $35$,但直接暴力 $2^{ 阅读全文
posted @ 2017-11-11 21:19 ftae 阅读(690) 评论(0) 推荐(2)
摘要:" 442 Div2 F" 题意 给出一些包含两种类型(a, b)问题的问题册,每本问题册有一些题目,每次查询某一区间,问有多少子区间中 a 问题的数量等于 b 问题的数量加 $k$ 。 分析 令包含 a 问题的问题册的问题数取正值,包含 b 问题的问题册的问题数取负值,那么问题就是求有多少子区间的 阅读全文
posted @ 2017-11-02 00:08 ftae 阅读(131) 评论(0) 推荐(0)
摘要:" 442 Div2 E" 题意 给你一棵树,每个结点有开关(0表示关闭,1表示开启),两种操作: 1. 反转一棵子树所有开关 2. 询问一棵子树有多少开关是开着的 分析 先 DFS 把树上的结点映射到区间上,然后就是线段树区间更新、区间求和了。 code cpp include define ls 阅读全文
posted @ 2017-11-01 00:55 ftae 阅读(162) 评论(0) 推荐(0)