
codefoces
Self-Discipline
在校大学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Codeforces Round #398 (Div. 2) Codeforces 767C Garland
传送门:点击打开链接题意:一棵树,每个节点有一个权值t,把它分成三部分,每部分要求权值和相等。分析:先可以先算出总大小sum。接着%3看能不能分,不能-1,能继续。然后递归算出每个子树的权值和。直接dfs,回溯的时候如果满足条件就清0并记录下来。注意由与权值可能有正有负,所以可能不止三部分满足条件,但是只要输出先找到的地方就行。代码:#include<bits/stdc++.h> us...原创 2018-06-05 11:28:21 · 263 阅读 · 0 评论 -
Codeforces 1005 F - Berland and the Shortest Paths
题目:点击打开链接 题意:找出所有点到1点的最短距离的子图,且数量不超过k。 分析:先bfs求出所有点到1点的最短距离,再判断这些点能否改变前驱最短距离保持不变,dfs找到它所能改变的所有前驱,并把连边保存下来,可以自己对照代码手动模拟一下。 代码: #pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈 #include&...原创 2018-07-16 21:07:03 · 476 阅读 · 0 评论 -
CodeForces 1003E Tree Constructing
题目:点击打开链接题意:构造一颗直径为d,度不超过k的树。分析:构造题。先把一条直径构造出来,然后确定每个直径上的点所能延伸的最大深度。代码:#pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈 #include<algorithm> #include<iostream> #include<cstdl...原创 2018-07-04 19:52:15 · 403 阅读 · 0 评论 -
CodeForces 1003D Coins and Queries
题目:点击打开链接题意:用最少的硬币凑钱,硬币值都是2的幂。分析:贪心。把每个数当成二进制数来考虑,从高位到低位贪心,开始还想着dp,后面发现贪心是正确的,开始以为贪心可能会凑不出。但是后面发现并不影响,以为高位可以由几个低位构成,比如 8 4 4 4 2 要凑成12,3个4肯定符合,但是从8开始贪心最少,8可以由多个4凑成。代码:#pragma comment(linker, "/STACK:1...原创 2018-07-04 21:00:00 · 284 阅读 · 0 评论 -
CodeForces 1003B Binary String Constructing
题目:点击打开链接题意:求一个含有a个0,b个1,x个相邻位置数字不相同的字符串。分析:构造题,暴力模拟。先用01交替,相邻不同的位置个数为x-1,然后把剩余的01放上去使得答案为x。第一个数可能是1,也可能是0,都要计算。代码写的太搓了,还被hack了。。。后面改进了下。代码:#pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈...原创 2018-07-04 21:59:28 · 438 阅读 · 0 评论 -
Codeforces 998D Roman Digits
题目:点击打开链接题意:I=1, V=5, X=10, L=50,n个位置可任意放4个数,n个数组成的值是每一位的值的和,要求最后代表的值不同的种类数。分析:看起来没有什么特别的算法能解决,只能暴力打表找规律了,我开始代码写的太搓了,用的set+dfs,复杂度(n^4*logn),只打出了前12个根本没找出规律,后面参考了下别人的代码,发现直接3个for循环暴力枚举每个数出现的次数就行了,复杂度为...原创 2018-07-05 16:27:56 · 435 阅读 · 0 评论 -
Codeforces 1006 F - Xor-Paths
题目:点击打开链接 题意:问你从(1,1)到(n,m)异或和为 k 的路径有多少条?只能向右和向下走。 分析:一般搜索复杂度为2^(n+m+2),折半搜索的复杂度为2^(n+m+2)/2*log2^(n+m+2)/2, 用map记录路径异或和,从左上跑一半,右下跑一半。 代码: #pragma comment(linker, "/STACK:102400000,102400000")//...原创 2018-07-18 11:15:37 · 253 阅读 · 0 评论 -
CodeForces 997C Sky Full of Stars
题目:点击打开链接题意:给n*n个格子,每个格子可以填3种颜色。问有多少种填色方案,至少有一列或一行是同色的。分析:首先反过来考虑,找不幸运的组合,因为这样便于容斥。 要把列和行分开考虑。 首先排除掉列上出现相同的情况,也就是(3^n−3)^n种,这个也就是容斥里开始时最大的范围,显然还包括了一些行上相同的情况,所以下面开始容斥。 在列上不出现相同情况下,行出现相同的情况要分两类讨论, 1. 那些...原创 2018-07-14 21:09:59 · 401 阅读 · 0 评论 -
Codeforces1005 E1 - Median on Segments (Permutations Edition)
题目:点击打开链接题意:给出一个1-n的排列,找出中位数为m的连续序列个数。分析:首先,可以知道答案序列一定存在m,所以可以以m为中心,先求前面(或者后面)大于m与小于等于m的数的个数之差,保存下来,然后记录后面(或者前面)大于m与小于等于m的数的个数之差,求出对应的使得序列中位数为m的数量。细节见代码。代码:#pragma comment(linker, "/STACK:102400000,10...原创 2018-07-15 19:50:01 · 377 阅读 · 0 评论 -
Codeforces 1004D Sonya and Matrix
题目:点击打开链接题意:给你t个数字,要你组成一个n x m的矩阵,这个矩阵满足这样的条件 ①矩阵里面的元素到“0”这个元素的曼哈顿距离为元素值大小。曼哈顿距离:两个点坐标差的绝对值之和。现在问你的是输出n,m以及元素“0”的坐标(x,y);如果不存在这样的矩阵,输出“-1”。分析:由于这个东西具有对称性,每一种解都可以通过翻转将它变化出最多四种解。 我们仅考虑(x,y)(x,y)在靠近左边界或者...原创 2018-07-15 20:15:14 · 368 阅读 · 0 评论 -
odeforces Round #503 (by SIS, Div. 2) C. Elections
题目:点击打开链接 题意:有n个学生,m个政党,每个学生有支持的政党,但是如果你给他一些钱,他就可以给你想让他投的党投票,现在想付出最少的钱使得1政党有绝对优势(票数严格大于其他党)。 分析:有一种贪心策略是一直收买所需钱最少的学生直到符合条件,但是这样显然是有点问题的,有可能其实只用收买一个收钱多的使得他的政党失败就可以了。考虑枚举最终票数。枚举完票数就开始处理,把每个党超过这个票数且收钱最少...原创 2018-08-12 21:28:10 · 222 阅读 · 0 评论 -
Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) E
第一次做交互题,了解一下交互题的套路。 平常的题都是系统给你一个输入,你的程序输出一个答案,然后就完了。 交互题就是在这之后,系统还会再给你一个输入,你再输出,系统再输入....(如此循环n次) To flush you can use (just after printing an integer and end-of-line): fflush(stdout) in C++; ...原创 2018-08-18 21:49:49 · 170 阅读 · 0 评论 -
Codeforces Round #506 (Div. 3) D. Concatenated Multiples
题目:点击打开链接 题意:给你n个数,求任意两个数组合而成能整除k的对数。 分析:根据除法的定义暴力就行了,用map或者unordered_map存一下余数就行。主要通过这题,对map和unordered_map有了一个新的认识,当用键值访问的时候就插入了,然后mp[key](unordered_map[key])自动赋值为0,导致查询的节点变多了效率变低了,所以可以用count函数先判断键是...原创 2018-08-26 09:10:13 · 168 阅读 · 0 评论 -
CodeForces 1000E We Need More Bosses
题目:点击打开链接题意:一条路径上必经的边为关键边,现在让你找一条路径,使得其关键边最多,输出最多的数量。分析:(无向图缩点+图的重构+树的直径)如果一条路径上面有环,那么这个环的任意一条边都不是关键边。所以我们缩点,那么就算在一棵树上找最多的关键边,显然就是求直径。以前只学了有向图缩点的模板,现在发现其实无向图、有向图缩点差不多,无向图要防止回退到已经访问过的点。树的直径的求法大致如下,先任意找...原创 2018-07-03 11:31:54 · 388 阅读 · 0 评论 -
codeforces 996 E. Leaving the Bar
题目:点击打开链接题意:给定一些向量,你可以改变它的符号,使得这些向量之和的长度小于1.5e6。分析:注意有方向,可以将速度分解成为x,y轴方向上的分量,每次贪心取最小,因为每次我贪心原则是一样的,最后的结果有可能大于1.5e6 ,我们需要加一些随机性,,多次贪心,直到结果满足题意。正解是每三个向量中都能找到两个向量合起来 <= 1e6,然后不断合并,最后只会剩下一个或者两个向量,如果一个向...原创 2018-06-27 14:33:53 · 416 阅读 · 0 评论 -
Educational Codeforces Round 45 990C. Bracket Sequences Concatenation Problem
传送门:点击打开链接题意:给n(3e5)个字符串,求(i, j)组合是合法的括号序列的个数。分析:最后只剩四种序列(①序列为合法,②序列只有'(',③序列只有')',④序列包含两种括号任意个。),组合一下就好了,算出每种的贡献求和。代码:#include<iostream> #include<algorithm> #include<cstdio> #includ...原创 2018-06-13 19:48:18 · 176 阅读 · 0 评论 -
CodeForces - 989 C
传送门:点击打开链接题意:构造一个满足一个矩阵,使得字符A,B,C,D的联通块个数等于输入的a,b,c,d。分析:构造好题,可以考虑把50*50的矩阵分成四块,每一个单独放一种字符,然后往里面插空加其他字符,例如A里面隔空加B,B里面隔空加A。代码:#include<iostream> #include<algorithm> #include<cstdio> #...原创 2018-06-21 21:26:13 · 226 阅读 · 0 评论 -
codeforces 999E Reachability from the Capital
题目:点击打开链接题意:给你n个点,m条边,以及一个初始点s,问你至少还需要增加多少条边,使得初始点s与剩下其他的所有点都连通。分析:思路一:首先统计强连通分量,缩点并重新构图。除了s结点所在的连通分量,如果其他连通分量所构成的新点的入度为0,则使这个连通分量与s连通的最优的方案是将这个点与s结点相连。思路二:先从起点搜索一遍,对不能到达的点加一条从首都到这个点的边(加边操作只能是思维上的,不能真...原创 2018-06-24 14:09:57 · 315 阅读 · 0 评论 -
codeforces 999D Equalize the Remainders
题目:点击打开链接题意:给你一个含有n个整数的数组a1,a2,…,an,和一个正整数m。保证m是n的因数。 在单次移动中,你可以选择在1到n之间的任一位置的数ai加1. 计算cr(0~m-1)——每个元素除以m之后的余数r。换句话说,对于每个余数, 找到与它相对应的元素。 你的任务是改变数组的元素使得c0=c1=…=cm-1=n/m; 找到满足上述要求的最小的需要改变的次数 。分析:贪心,首先记录...原创 2018-06-24 15:07:51 · 408 阅读 · 0 评论 -
CodeForces 990D. Graph And Its Complement
题目:点击打开链接题意:给定a,b.要求构造一个邻接矩阵,对应的图中,有a个联通块;对应的补图有b个联通块。分析:a>1,那么b一定为1.说明a,b中至少有一个是1.特判构造a>1,前a-1个独立,为a-1个联通块;[a+1,n]顶点为一个联通块a==1,b>1.构造补图的,再返回来a==1,b==1.n=1成立,n=2,n=3不成立.n>=4,就是一个链构造题做的太少了,...原创 2018-06-24 21:15:20 · 261 阅读 · 0 评论 -
CodeForces 981D Bookshelves
题目:点击打开链接题意:给你n本书以及每本书的权值,现在让你把n本书放到k个书架上(只有连续的几本书可以放到一个书架上),每个书架的权值是书架上每本书的权值加和,总的"beauty"是每个书架权值按位与的结果,要求输出最大的"beauty"。分析:因为要求总"beauty"是所有书架权值的按位与的结果,所以对于总"beauty"的二进制,位数越高的1的价值越大,所以可以从高位开始枚举这一位是否能取...原创 2018-06-29 21:29:30 · 228 阅读 · 0 评论 -
Codeforces 981 C. Useful Decomposition
题目:点击打开链接题意:给定一棵树,要求拆成若干条简单路径,并且这些路径都经过一个公共节点。给出任意一个解决方案,如不存在输出No。也就是说呈发散状。分析:关键是要找到一个根节点,后来发现度最大的可以作为一个根节点,然后沿着根节点搜索,如果为3则不存在,如果度为2继续搜,如果度为1则表示搜到底了。(所有简单路径都经过一个公共节点,我们倒推回去,就是把公共节点看成根节点,然后从这个节点出发,没有分叉...原创 2018-06-29 21:39:07 · 244 阅读 · 0 评论 -
Codeforces 991E. Bus Number
题目:点击打开链接题意:题意:给你一个数字序列A(长度不超过18位),问有多少个序列B满足①A中所有数字都一定要在B中出现过;②B中所有数字也一定要在A中出现过;③序列B不能以0开头分析:爆搜所有数字出现情况,然对于每种情况求出非0开头的全排列数量1、记录每个数字出现的次数cnt[i]2、将出现过的数字i从1到cnt[i]遍历。(i from 0 to 9)3、得到要使用的数字次数数组tp[]。4...原创 2018-06-25 22:11:49 · 995 阅读 · 0 评论 -
CodeForces 1000B Light It Up
题目:点击打开链接题意:有一盏灯,0时刻开着。n次操作,你可以在其中加入一次操作(或者不加),操作为:a[i]时刻按一下开关,状态变为相反状态(开->关or关->开)。问灯亮着的时长最长为多少? 保证a[i-1]<a[i]。 3 10 4 5 7 0~4开(时长为4-0),4~6关(时长为6-4),6~7开(时长为7-5),7~10关(时长为10-7) 我们可以在第3个时刻操作一...原创 2018-07-02 14:51:13 · 717 阅读 · 0 评论 -
CodeForces 1000C Covered Points Count
题目:点击打开链接点击打开链接题意:n个线段,问被这n个线段覆盖k次(k∈[1..n])的点的个数。 分析:把每个线段的起点终点分别存起来,起点标记为1,终点标记为-1,然后按照起点终点的位置排序。说不清,放个图吧。 比如 3 0 3 1 3 3 8 这组样例,排完序之后的顺序就是图中绿色的编号。 我们发现,1点的标记是1,二点的标记也是1,证明他们都是起点,一开始我们设一个计数变量,我们发现点被...原创 2018-07-02 14:59:10 · 219 阅读 · 0 评论 -
Codeforces 1000D Yet Another Problem On a Subsequence
题目:点击打开链接 题意:定义一个数列是“好的”:第一个数字a[0]为数列长度+1。定义一个数列的子序列是“好的”:这个子序列能分割成几个“好的”数列。给出一个数列,求“好的”子序列的数目。 分析:定义dp[i]为以a[i]为开头的好序列数目,第一种情况很好求,第二种情况有点难想,应该从后往前遍历,先计算第一种情况,然后累加之后的情况。(dp[i]代表以i开始的符合要求的序列数,j是我们列举出的i...原创 2018-07-02 15:20:54 · 424 阅读 · 1 评论 -
codeforces 996D Suit and Tie
题目:点击打开链接题意:n个互不相同的数字,每个数字有两个,共2*n个数字,使得任意相等的数字都相邻,最少的操作次数,操作为:交换相邻两个数字的位置。分析:自己想复杂了,数据范围挺小的,暴力贪心即可,从前往后扫(i+=2),如果a[i]跟a[i+1]相同,就找到和他相同的那个数字,然后把它交换到a[i+1]的位置,统计答案。(假设不考虑别的数的影响 我们最少也需要挪动两个数字中间距离-1 那么我们...原创 2018-06-27 14:14:46 · 330 阅读 · 0 评论 -
Codeforces Round #506 (Div. 3) C. Maximal Intersection
题目:点击打开链接 题意:给出数轴上的一些线段,可以任意删掉其中的一条线段,求最大的删除后所有线段的重合处的长度。 分析:容易知道n条线段的相交部分一定是(Lmax,Rmin),那么我们可以暴力删除每一条线段,然后查询最大的左端点和最小的右端点,更新答案。用multiset维护就行,它可以维护重复的元素,注意删除的时候用find(x)函数找到元素值为x的第一个元素,如果直接用erase(x)会...原创 2018-08-26 15:17:12 · 191 阅读 · 0 评论