![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces
文章平均质量分 83
AC_Arthur
Die luft der Freiheit weht
展开
-
Codeforces Round #404 (Div. 2) 题解
题目链接:点击打开链接这次比赛AC了4个水题, 然而我zz了E题写了个bug调了很久没时间写D啦。A. Anton and Polyhedrons水题, 加一加就行了。B. Anton and Classes排序就行了, 我们肯定是在一个区间集合中找一个右端点最小的, 在另一个集合里找一个左端点最大的。C. Anton and Fairy Tale我们可以发现,原创 2017-03-16 05:46:10 · 1376 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1) A. NP-Hard Problem(二分图染色)
题目链接:点击打开链接思路:根据题目描述, 就是找两个不相交点集使得对于每一条边至少有一个顶点在点集中, 那么显然对于每条边必须是一个点在A集合, 一个点在B集合, 即二分图染色裸题。WA了一次, 因为有可能存在好几个连通图。细节参见代码:#include #include #include #include #include #include #include #i原创 2016-07-06 15:18:36 · 1467 阅读 · 0 评论 -
Codeforces Round #271 (Div. 2) E. Pillars(线段树+DP)
题目链接:点击打开链接思路:类似于最长上升子序列, 我们很容易得到一个n^2的算法, 但是时间复杂度无法承受。可以发现, |a[i]-a[j]| >= d相当于对于每个j, 找到一个i = a[j]+d)中最大的dp[i]。 我们将数字大小离散化之后做线段树下标, 然后维护一个区间最大值就行了。 时间复杂度O(nlogn)细节参见代码:#includeusing namesp原创 2016-07-13 14:03:57 · 539 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2) D. Alyona and Strings(DP)
题目链接:点击打开链接思路:类似于LCS, 只需用d[i][j][k][p]表示当前到了s1[i]和s2[j], 形成了k个子序列, 当前是否和上一个字符和上一个字符相连形成一个序列的最长序列和。细节参见代码:#include #include #include #include #include #include #include #include #includ原创 2016-07-09 22:03:07 · 1284 阅读 · 0 评论 -
Manthan, Codefest 16 D. Fibonacci-ish(暴力)
题目链接:点击打开链接题意:给你n个数, 问最长的题目中定义的斐波那契数列。 思路:枚举开始的两个数, 因为最多找90次, 所以可以直接暴力, 用map去重。 注意, 该题卡的时间有点厉害啊, 用了两个map结果超时。细节参见代码:#include#include#include#include#include#include#include#include#in原创 2016-02-28 21:38:13 · 1618 阅读 · 0 评论 -
Codeforces Round #269 (Div. 2)(D. MUH and Cube Walls(KMP))
题目链接:点击打开链接题意:给你一个长度为n的序列, 让你找其中有几个长度为m的序列的形状(即高低差距)思路:将数组预处理成相邻两数的差的形式, 然后KMP即可。 KMP的精华在于状态转移图的构造, 有点DP的思想, 也就是预处理失配之后能转移到代价尽量小的地方。这里附上一篇KMP详解:点击打开链接细节参见代码:#include#include#include#inclu原创 2016-03-12 16:26:17 · 1348 阅读 · 0 评论 -
Codeforces Round #250 (Div. 2) (D. The Child and Zoo(并查集))
题目链接:点击打开链接题意:给你一个n个点, m条边的图, 每个点有一个点权值, 我们定义f(p, q)表示p点到q点的一条路径, 要求这条路径上的最小点权尽量大, 其值等于最小点权值。 求任意一对点的f值之和除以n * (n - 1) , 即平均值。思路: 其实转化一下, 就是要先求最大生成树, 那么路径一定在树种, 且唯一。 那么我们从大到小来, 每次将两个集合合并的时候, 那么A原创 2016-03-11 19:46:24 · 1308 阅读 · 0 评论 -
Codeforces Round #345 (Div. 2) (D. Image Preview(二分))
题目链接:点击打开链接题意:给你n个照片, 从第一个照片开始看, 如果一张照片是'w', 那么要花费b时间去反转他, 否则不用反转, 看一张从来没看过的照片要1时间, 从一张滑动到另一张要a时间。 如果一张照片看过, 则不用再反转, 也不用再傻1s 。 求在不超过T时间的前提下最多能看多少张。思路:首先我们可以发现, 存在折返的情况, 也就是看到一个地方返回向另一端翻照片。 但是显然最多只原创 2016-03-10 21:20:59 · 1960 阅读 · 0 评论 -
Codeforces Round #343 (Div. 2) (C. Famil Door and Brackets(DP))
题目链接:点击打开链接题意:给你一个长度为m的只含()的括号串s, 要求在s两端在加两个串p和q, 使得总长度为n,并且平衡, 平衡是指任意前缀串的(都不少于), 并且整个串的(和)一样多。思路:我们不难想到这样一个DP, d[i][j]表示长度为i的串,(比)多j个(或者)比(多j个, 是等价的)的方案数。 那么转移很简单:if(j > 0) d[i][j] += d[i-1][j原创 2016-02-23 17:27:11 · 1295 阅读 · 1 评论 -
Educational Codeforces Round 8(E. Zbazi in Zeydabad(树状数组优化))
题目链接:点击打开链接题意:一个n*m矩阵, 里面的格子除了'z'就是'.',问有多少个z形图案。思路:因为n和m很大, 即使n^3复杂度也会超时。 如果按照最朴素的方法, 我们可以处理一下前缀和, 处理出一个格子向左l[i][j]、向右r[i][j]、斜向左下lr[i][j]连着的z到哪里为止, 这样我们用n^2复杂度枚举每一个格子作为z形图案的右上角,取min(l[i][j], lr原创 2016-02-22 21:24:58 · 1699 阅读 · 1 评论 -
Codeforces Round #360 (Div. 1) C. The Values You Can Make(DP)
题目链接:点击打开链接思路:用d[i][j][k]表示, 前i个数, 选取的数之和为j, 再次选取的数之和为k的种类数。 那么当这种情况存在时, 我们把此时的k保存即可。细节参见代码:#include #include #include #include #include #include #include #include #include #include原创 2016-07-06 15:30:44 · 1473 阅读 · 0 评论 -
Codeforces Round #305 (Div. 1) B. Mike and Feet(并查集)
题目链接:点击打开链接思路:我们把元素从大到小排序, 从大到小依次合并区间, 对于第i个数, 如果他相邻左边的数比他大就合并, 相邻右边也一样。这样, 我们就求出了第i个数为最小值的最大区间。 更新答案即可。细节参见代码:#include #include #include #include #include #include #include #include #in原创 2016-07-17 16:53:52 · 1208 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1) B. Remainders Game(中国剩余定理)
题目链接:点击打开链接思路:中国剩余定理, 请看维基百科:点击打开链接该题我们由已知可以写出n个线性同余方程:x % c[i] == a[i] % c[i]。那么中国剩余定理中明确指出。 我们可以知道 x % lcm(c[i]) 的值。 那么如果lcm可以整除k而不产生余数, 我们也就知道了x % k的值, 它就等于 x % lcm的值。细节参见代码:#include原创 2016-07-07 17:06:31 · 1398 阅读 · 2 评论 -
Codeforces Round #396 (Div. 2)D. Mahmoud and a Dictionary(带权并查集)
题目链接:点击打开链接思路:带权并查集水题。 带权并查集可以知道在一个集合里的两点间距离。那么这种同义反义关心恰好对应距离的奇偶。附上一图:这就是合并的过程。细节参见代码:#include #include #include #include #include #include #include #include #include #includ原创 2017-02-09 01:46:48 · 479 阅读 · 0 评论 -
Codeforces Round #388 (Div. 2)D. Leaving Auction(水题呀?)
题目链接:点击打开链接思路:我们只要把每个人竞价的最大值存起来, 并且把每个人的所有竞价维护在一个有序数组(方便二分), 对于一组询问, 我们从大到小遍历这k个数,把不在这k个数的最终竞价最大的两个人找到(复杂度O(K)), 然后在竞价最大的那个人的set里二分第二大的人的竞价最大值就行了。细节参见代码:#include #include #include #include原创 2016-12-20 22:02:50 · 941 阅读 · 0 评论 -
Codeforces Good Bye 2016(部分题解)
本次比赛一共AC了前4题...A. New Year and Hurry水题。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2016-12-31 19:29:48 · 889 阅读 · 0 评论 -
Codeforces Round #384 (Div. 2)D. Chloe and pleasant prizes(树DP)
题目链接:点击打开链接思路:比较简单的树DP, 用dp[u][id]表示当前以u为根的子树还已经找到几个子树的最大值。 转移比较多, 一方面可以转移到某一个儿子, 表示问题在以后解决, 一方面如果id==1说明还要找1个子树,可以直接用val[u]更新, val[u]表示该子树的和。 如果id == 0说明还要找两个子树, 我们用两个最大的儿子值更新即可。细节参见代码:#in原创 2016-12-19 20:20:09 · 850 阅读 · 0 评论 -
Codeforces Round #200 (Div. 1) D. Water Tree(dfs序+线段树)
题目链接:点击打开链接思路:dfs序其实是很水的东西。 和树链剖分一样, 都是对树链的hash。该题做法是:每次对子树全部赋值为1,对一个点赋值为0,查询子树最小值。该题需要注意的是:当我们对一棵子树全都赋值为1的时候, 我们要查询一下赋值前子树最小值是不是0, 如果是的话, 要让该子树父节点变成0, 否则变0的信息会丢失。细节参见代码:#include #in原创 2016-12-07 19:04:09 · 504 阅读 · 0 评论 -
Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan(dfs&lcm)
题目链接:点击打开链接思路:很简单的一道题, dfs之后求n个数的lcm就行了, 从网上扒下来一个lcm,mdzz死循环了。。不对的代码你贴个XX细节参见代码:#include #include #include #include #include #include #include #include #include #include #include #原创 2016-12-07 11:49:19 · 726 阅读 · 0 评论 -
Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(DP)
题目链接:点击打开链接思路:在宿舍打CF不敢使劲敲键盘, 最后没交上D也怨不了别人。 挺水的DP, 就是个背包。细节参见代码:#include #include #include #include #include #include #include #include #include #include #include #include #include原创 2016-12-07 11:23:37 · 594 阅读 · 0 评论 -
E. XOR and Favorite Number(莫队算法)
题目链接:点击打开链接思路:莫队算法适用于无修改操作的区间问题。 关键是, 需要能够用O(1)时间从[l, r]转移[l+1, r], [l-1, r], [l, r+1], [l, r-1]。该题需要观察异或和的特点, 它是满足区间加减的。 区间[l, r]的异或和等于[1, r] - [1, l-1]。 那么我们用莫队算法维护每个点的前缀异或值, 就是可以完美解决这个问题原创 2016-11-09 15:41:43 · 792 阅读 · 0 评论 -
Codeforces Round #363 (Div. 2)题解
这场比赛水了4个题。 部分题解如下:A. Launch of ColliderA题:我们每次遇到一个L, 就找到上一个R,他们肯定是比较近的, 这些中最近的就是最近的辣。细节参见代码:#include #include #include #include #include #include #include #include #include #inclu原创 2016-07-20 20:49:59 · 1461 阅读 · 0 评论 -
Educational Codeforces Round 8(D. Magic Numbers(数位DP))
题目链接:点击打开链接题意:给一个m一个d, 一个字符串a和b, 问在[a,b]范围内, 有多少个可以整除m的魔法数, 魔法数的定义是, 偶数位上都是d, 奇数位上都不是d。思路:据说是典型的数位DP, 以前没做过数位DP, 感觉和DP差不多?用d[i][j][p]表示当前到了第i位, 余数为j, p == 1表示目前和b串相等, p == 0表示已经比b串小了。 每次枚举第i位上放原创 2016-02-21 22:31:33 · 1524 阅读 · 1 评论 -
Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+离散化优化DP)
题目链接:点击打开链接题意:给出n个圆柱体的地面半径和高, 要求只能有一个直接放在桌子上, 其他的要放在他上面, 第i个能放在第j个上面的条件是:当且仅当第i个的体积大于第j个且j 思路:一看就是一个DP, 而且状态很容易表示, d[i]表示到第i个为止能得到的最大总体积。 转移到 max(d[j]) + a[i], (j a[j])。 但是n非常大, 显然要优化, 因为第二层循环原创 2016-02-21 14:27:34 · 1567 阅读 · 0 评论 -
Codeforces Round #105 (Div. 2) (D. Bag of mice(概率DP))
题目链接:点击打开链接题意:原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢。 王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。 每次抓老鼠和跑出来的老鼠都是随机的。 如果两个人都没有抓到白色老鼠则龙赢。王妃先抓。 问王妃赢的概率。 思路:概率DP, 用d[a][b][id]表示当前还剩a只白鼠, b只黑鼠,原创 2016-03-30 21:09:43 · 981 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2)题解
题目链接:点击打开链接这次的比赛比较简单, 有些坑点, 主要是考思维的严密性。。。比赛时做出了前4道, 都没有什么算法, 最后一道的通用解法是莫队算法, 现在还不会, 今天就补上。终测挂了C,原来是漏了枚举第一个半径为0的情况, 太失误了。A. Elephant原创 2016-01-24 14:02:14 · 857 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree(DFS序+线段树)
题目链接:点击打开链接题意:给你一棵树,编号1~n,告诉你根结点是1。 每次有两个操作:1,将以v为根的子树的结点全部染成颜色c2,问以v为根的紫书的结点的颜色种类。思路:如果这是一条线段的话, 那么这就是线段树的区间更新问题,而现在是一棵树。因为告诉了根结点是1, 那么这棵树的任意一个结点的子树就是确定的, 所以我们可以用DFS的先序遍历,将所有结点重新编号,因为先序遍历的话原创 2016-01-22 16:56:41 · 1145 阅读 · 0 评论 -
Codeforces Round #299 (Div. 1) A. Tavas and Karafs(二分)
该题数据量很大, 需要用二分加速算法。题意比较难懂: 给你一个无穷项等差序列, 有n个查询, 对于每个查询, 有三个数 l, t, m, 每次从第l个数之后的数种选择最多m个数使得他们的值减一, 经过最多t次, 求一个最大的r, 使得从l到r所有数都减为0。显然这是一个递增序列, 那么我们直接二分答案就行了 。 如果满足这段序列求和 另外还学到了一个二分上界的好姿势。细节参见原创 2015-12-21 10:40:51 · 789 阅读 · 0 评论 -
Codeforces Round #297 (Div. 2) E. Anya and Cubes (双向DFS)
首先思考最暴力的方法: 我们用DFS直接搜索所有可能解, 那么对于每一层,有3种决策: 不选这个数, 选择这个数, 选择这个数的阶乘。 递归深度最大25, 时间复杂度O(3^25), 太大了, 要想办法降低时间复杂度。 还记得之前的简化版吗? 我们在四个集合中每个集合选择一个数字相加,问是否等于一个数S, 我们的方法是预处理两个集合中所有的情况,然后二分。 该题也可以采取相同的策略: 进原创 2015-11-25 22:20:54 · 824 阅读 · 0 评论 -
Codeforces Round #279 (Div. 2) B. Queue(链表)
仔细观察可以发现,用链表的方法我们可以很容易的将偶数位和奇数位的答案补充完整。 只需要记录一个数的前驱和后驱就行了。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#in原创 2015-10-31 10:54:01 · 704 阅读 · 0 评论 -
Codeforces Round #325 (Div. 2) C. Gennady the Dentist(水题)
直接暴力就行,n^2复杂度可以承受 。比较坑的是该题爆int 。 因为4*10^3*10^6 > 2147...细节参见代码:#includeusing namespace std;typedef long long ll;const int INF = 1000000000;const int maxn = 4000 + 5;int n,m,vis[maxn];vect原创 2015-10-15 20:50:47 · 571 阅读 · 0 评论 -
Codeforces Round #325 (Div. 2) B. Laurenty and Shop(暴力)
一开始真没反应过来,后来才看到题目里特地黑体字加深了该题的关键:只能通过大道一次。也就是说,在什么地方穿过大道定了之后,那么路线也就定了。 因此我们只要暴力枚举在那个大道路口穿过就行了。细节参见代码:#includeusing namespace std;typedef long long ll;const int INF = 1000000000;const int max原创 2015-10-13 17:47:14 · 588 阅读 · 0 评论 -
CodeForces 483B Friends and Presents(二分+容斥定理)
该题比赛的时候没能想到用二分优化,一直超时。 其实答案是一个单调函数, 对于一个答案m,如果m不符合条件,那么小于m的都不符合,反之亦然。所以我们可以直接二分答案,然后关键是判断。 通过观察,可以发现,对于答案m,能被x除尽的个数是m/x,能被y除尽的个数是m/y。 那么可以用来给f1(朋友1)的个数就是m-m/x,用来给f2的个数就是m-m/y。但是还要注意两者都能除尽的个数是m原创 2015-11-14 10:02:21 · 660 阅读 · 0 评论 -
Codeforces Round #323 (Div. 2) C. GCD Table
根据数表形成的规则,可以很轻松的发现,当前数表中最大的两个数一定是原数列中的数,求出它们的gcd,那么当前数表中一定有两个gcd是他们形成的,将其去除。用什么容器维护都可以,我用的multiset 细节参见代码:#includeusing namespace std;typedef long long ll;const int INF = 1000000000;const in原创 2015-10-09 22:00:26 · 613 阅读 · 0 评论 -
2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest F. Gourmet and Banquet(贪心+二分)
该题是一道比较典型的贪心+二分, 题目中已经加深提示了吃每个菜的时间要一样, 那么这个时间到底是多少呢? 我们很自然的想到了要用二分来加速算法。所以主体框架就是二分这个吃每道菜的时间, 然后问题的关键是如何判断到底能不能满足要求。 处理区间问题, 我们可以采取贪心的思想,为了给后续的菜留出尽量多的空间,我们可以按照区间右端点从小到大排序, 但是区间覆盖情况很复杂,所以我们不妨牺牲一些时间原创 2015-12-05 20:33:48 · 958 阅读 · 0 评论 -
Codeforces Round #271 (Div. 2) E. Pillars(线段树优化DP)
题目链接:点击打开链接题意:一个n个数的序列,每个数有一个高度值h[i]。 求一个最长子序列,要求相邻两个数满足| h[i] - h[i-1] | >= d。 并要求打印出该序列。类似于最长上升子序列, DP思想很简单, 但是可惜n太大了, 二重循环会超时。 所以要想办法优化掉第二层循环。观察发现, 第二层所做的事情就是在所有满足j= d 的j中找到最大的d[j]。j 把不等式原创 2016-01-25 17:50:00 · 1298 阅读 · 0 评论 -
Codeforces Round #235 (Div. 2) D. Roman and Numbers(状态压缩DP)
题目链接:点击打开链接题意:给你一个数n,要求将n的各个位上的数重新排列(不能有前导0),使得形成的数对m取模为0, 问有多少个这种数。思路:因为n太大了,枚举全排列复杂度高达n!。 因为n最大有18位, 所以可以用状态压缩每一位,表示当前的答案中选了哪些数了。那么不难想到状态d[i][j]表示当前已经把哪些位上的数用了(用集合i表示),且此时余数为j的答案数。 这样递推到所有数都用了原创 2016-01-25 23:21:14 · 1460 阅读 · 0 评论 -
8VC Venture Cup 2016 - Elimination Round F. Group Projects(DP)
题目链接:点击打开链接题意:给n个人, 让我们分成若干组, 每组的值是最大值减去最小值, 求所有组的和。思路:显然, 需要用DP的思想, 但是该题DP设计的非常巧妙, 而且状态转移的情况容易考虑不全。我们用d[i][j][v]表示考虑了前i个数了, 有j个组是开放的(所谓开放指的是只有最小值, 还没有最大值, 还可以进人), 当前值之和为v 的方案数。我们先排序, 这样, 对于开放原创 2016-02-19 22:06:12 · 1610 阅读 · 0 评论 -
8VC Venture Cup 2016 - Elimination Round E. Simple Skewness(枚举+三分)
题目链接:点击打开链接题意:给你n个数, 要求选若干个数, 使得这些数的平均数减去中位数尽量大。思路:由于该题没有顺序问题, 排好序之后我们可以枚举中位数, 可以证明, 奇数个数一定比偶数优,然后三分中位数左右区间长度x(数的个数), 在中位数的右边选最大的x个数, 在左边也选最大的x个, 这样, 随着区间长度的增加, 平均数将先增大后减小, 或者一直减小,或者一直增大。为什么呢? 假原创 2016-02-18 11:20:06 · 1653 阅读 · 2 评论 -
Educational Codeforces Round 9(D. Longest Subsequence(筛法))
题目链接:点击打开链接题意:给定n个数, 求一个最长的不连续子序列, 使得子序列中所有元素的最小公倍数 思路:因为最小公倍数 筛法复杂度是O(nlogn)。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2016-03-03 16:26:58 · 1072 阅读 · 0 评论