CodeForces
Mavis code
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) B. The Bits
题目传送门:http://codeforces.com/contest/1017/problem/B本题可以找规律,因为是or运算,所以第二个01串上的1不用管,因为无论怎么调换第一个01串,1所对应的那位结果永远是1,所以只用看第二个01串的0位。比如样例,第一个是01011,第二个是11001,只用看第3,4位即可。第3位的0对应的是0,所以在第一个字符串找1,而1有两种,一种是0对应的1...原创 2018-08-09 10:10:41 · 172 阅读 · 0 评论 -
Slime-(找数学规律)-Codeforces Round #508 (Div. 2)
题目传送门 题意: 相邻的数相减合并,求最后剩下的一个数的max. 思路: 这种可以找几个简单的例子,看出规律。找不变的规律,表面上看起来很复杂,抓住问题的本质就很简单了 。用min不断减去相邻的+数,max不断减去相邻的-数,最后的值就是max_sum 排序后,首先是最大值和最小值是确定的,max是加,min是减,然后讨论中间的数,若全是-,则用max减去它们, //若全是+,则用...原创 2018-09-07 11:42:54 · 175 阅读 · 0 评论 -
分类讨论-Array Product-Codeforces Round #510 (Div. 2)
思路:分类讨论,但是要讲究方法。先把不变的量提取出来。达到分类讨论最大的统一化。如果简单的分类讨论,代码将很长,而且很容易出错。详情请看代码注释。AC code;#include<iostream>#include<cstdio>#include<vector>#include<bits原创 2018-09-19 23:27:38 · 128 阅读 · 1 评论 -
Maximum Subrectangle-Codeforces Round #513-C-简单DP
题目传送门题意:在一个矩阵中寻找一个子矩阵,并且子矩阵的权值小于给定的数,使得它的面积最大。输出面积的最大值。思路:首先是推导的过程,我是看别人思路的,而且不会在这里写数学公式,所以就给传送门,还请大家原谅。推导过程传送门首先,用前缀和记录。然后枚举特定长度的和的最小值(这就是最优子结构性质)。a,b两个数组可以分开枚举,这是推导出来的,并且由于他们任意两个位置都可以相乘,所以就不用考虑...原创 2018-10-05 20:19:20 · 133 阅读 · 0 评论 -
Forgery - Codeforce514-B
题目传送门题意:盖印章,判断能否达到预期效果。思路:感觉智商被完爆,我刚开始是在原来的结果,也就是预期效果的那张图做手脚,去检查它上面的点是否能够满足要求,结果想了许久,也没有相处判断条件。看了别人的之后,感觉智商被虐。我们不用想那么复杂,只要自己准备一张白纸,然后不断印,最后印出来的与预期结果进行比对就可以了。至于怎么印,在预期结果上检查,只要他满足印章的样式,那么就印一个。注意边界...原创 2018-10-06 10:57:49 · 245 阅读 · 0 评论 -
Vasya and Golden Ticket-Codeforce 512C-前缀和
题目传送门题意:给你一串数字,判断是否能将这串数字分成和相等的几部分。思路:首先将0剔除掉,因为0没有什么影响,只有两种特殊情况有影响,提前判断一下即可。然后用前缀和算出所有可能区间的和,并且记录区间的左右端点,然后排序。遍历所有的区间,找到左端点为1的区间,然后在值相等的区间中找到可以连接的区间,知道区间的右端点等于终点。复杂度就是O(5050)虽然没有某些大佬们写的简洁,但也是我努力...原创 2018-10-06 17:14:01 · 204 阅读 · 0 评论 -
CF-515div2-B-有趣的贪心(挑战的P46)- Heaters
题目传送门题意:在一个数列里面有0,1。0代表没有heater,1代表有heater.每个heater都有相同的半径r。要你打开最少的heater是的每个地方都能被heat到。注意1本身也是没有heater的。所以要考虑1.昨天我就是这里理解错了,所以一直debug都没有改出来。正确理解题意是多么重要的一件事。现在终于该出来了,我感慨万千。debug的历史。思路:首先这与挑战P46的题目...原创 2018-10-13 16:14:43 · 234 阅读 · 0 评论 -
CodeForce500B-And-好题-分类讨论
题目传送门题意:给定一个数x和一个数组,求要经过几次与x的&操作才能是数组出现两个相同的元素。思路:先给出官方题解:Clearly, if it is possible then there are no more than 2 operations needed.So we basically need to distinguish 4 outcomes — - 1, 0,...原创 2018-10-10 11:22:37 · 212 阅读 · 0 评论 -
CodeForce-500C-Photo of The Sky最小矩形面积
题意:给定2*n个坐标,让你组成n个坐标,满足条件:找到一个矩形,所有点都在矩形内(包括边界)。然后求矩形面积的最小值。思路:首先想到的一种特殊情况就是,如果有一个数至少出现了n次,则面积为0。但是我们要从变量中找出不变量,也就是最大值和最小值一定属于边界的顶点处。第一种就是min和max是对角线位置。然后就是那个乘法,可以证明当min和max是对角巷位置(也就是x,y坐标)这就是最小的...原创 2018-10-10 17:18:57 · 145 阅读 · 0 评论 -
CodeForce499C-Fly-1的抽象运用
题目传送门题意:从地球出发,经过n个星球,起飞降落分别计算耗油。a数组用来记录去i-th星球升起时,一单位油能带动的质量。b数组记录降落在i-th星球时,一单位油能带动的质量。问最少要从地球转载多少单位的油?思路:此题就是典型的在一定的解空间搜索解,只要找准二分搜索的结束判定就可以了,复杂度nlog(n).但是还有更简单的思路。我虽然不知道预想要装载多少的油,但是我可以将油和货物看成一个...原创 2018-10-11 00:01:00 · 146 阅读 · 0 评论 -
Vasya and Robot- 二分搜索- Educational Codeforces Round 53 (Rated for Div. 2)
题目传送门题意:机器人初始位置在(0,0),然后输入一串指令有R,L,D,U,分别向x,y方向行走,R:x+1,L:x-1,U:y+1,D:y-1;。然后输入目标位置,要你求需要改变的最短区间的长度,使得机器人可以走到目标位置,如果不能则输出-1.思路:求最小区间长度,我们可以二分搜索区间长度。先预处理,求出所有区间的前缀和,二分最短区间的长度。关键设计好check()函数,枚举所有长度...原创 2018-10-29 16:49:21 · 138 阅读 · 0 评论 -
Curiosity Has No Limits-CF div517-B(优雅的暴力)
题目传送门思路:这道题首先看过去,就是CF那种要你生成一个满足条件的序列或者字符那种题型。这种题型一般都有简单的规律。果不其然,这道题并不需要复杂的分类讨论,有一个规律。你可以通过a1,b1枚举出t1和t2。那么这个规律就是:如果t(i)是已知的,那么a(i),b(i),t(i)三者可以根据题目中的关系唯一确定t(i+1).这个可以用程序暴力枚举证明。证明代码片段如下:for(int ...原创 2018-10-24 22:26:06 · 211 阅读 · 0 评论 -
Educational Codeforces Round 64 (Rated for Div. 2)-C. Match Points-二分搜索
题目传送门题解:Let’s denote the points that have greater coordinates in their matched pairs as R-points, and the points that have smaller coordinates as L-points.Suppose we have an R-point that has smalle...原创 2019-05-03 11:29:52 · 435 阅读 · 0 评论 -
CF-B. Catch Overflow!
题目传送门简单题:惨痛教训。#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<set>#include<stack>#include<queue>#include<map>#in...原创 2019-06-06 11:05:35 · 330 阅读 · 0 评论 -
CF66-DIV2-D. Array Splitting-思维题
题目传送门思维题。思维方法:本题的思维启示:首先,他是连续区间,意味着区间每个数的位置不能改变。所以首先想到贪心从开始选取,但是如果从1-n开始贪心,贪心前面的不知道会对后面造成什么影响,还有k这个约束。之前的思维是既然无法对每个数直接通过改变他们顺序贪心,那么久从1-n开始贪心,一步一步划分,将划分出来的新部分*他的权重。 总的来说就是,先确定分法,然后再计算权重。这是比较直观的...原创 2019-06-06 15:48:47 · 433 阅读 · 0 评论 -
CF-思维题-div2-564-C. Nauuo and Cards
题目传送门Official Tutorial:First, try to finish it without playing any empty cards.If that’s not possible, the best choice is to play several empty cards in a row, then play from 1 to n. For a card i, ...原创 2019-06-08 11:26:36 · 639 阅读 · 0 评论 -
CF-div3-565-C. Lose it!(代码短小精悍,简化代码)
题目传送门简单题,自己的离线写法,思维直白,写起来过长,还容易出错。在线简洁代码:#include<bits/stdc++.h>using namespace std;const int maxn = 5e5 + 10;#define per(i,a,b) for(int i = (a);i <= (b);++i)int b[7] = {0,4,8,15,16,23...原创 2019-06-10 23:04:43 · 494 阅读 · 0 评论 -
Vasya and Arrays-数学规律- Educational Codeforces Round 50 (Rated for Div. 2)-D
题意: 给你两个序列,相邻的数可以合并,问在两个序列执行这样的操作,最后可以是两个序列相等吗?若相等,相等的最大长度又是多少? 思路: 比赛的时候想到模拟。其实很多题,第一眼的思路都是去模拟,比如这次比赛的B题,我摸你了半天还是失败了。可以说,模拟简单直白,容易想到,但往往害死人。 我们直接利用类似前缀和的做法去弄。第一个序列的前缀和是sum1,第二个时sum2,若sum1 < su...原创 2018-09-10 09:55:33 · 215 阅读 · 0 评论 -
Valid BFS -Manthan, Codefest 18 (rated, Div. 1 + Div. 2)-D题
题意: 给定一个图和一个序列,判断序列是否是该图BFS其中的一个结果(因为BFS选择邻接点的方式有很多种)。 思路: 好吧,比赛的时候没想出来。既然方式是多样的,那么我们就用序列所给的方式来BFS。这个可以通过顺序来实现,在所给序列先出现的就先放入队列,这样就可以按照所给序列方式遍历。我们按照节点在序列出现的先后顺序给每个节点编号,然后给每个点的邻接点按照编号从小到大排序。然后BFS跑一遍,...原创 2018-09-03 15:16:29 · 215 阅读 · 0 评论 -
Quantity of Strings - codeforce 151
这道题就是找规律,注意当k是奇数时,ans = m*m,而不是ans = m的(k+1)/2次方,不信你可以在草稿本上画一下,比如 7 2 5 ,答案是4不是8。 其他规律看代码,还要注意不能用pow函数,会有精度问题。注意用cin ,cout ,代替scanf,printf. 废话少说,看AC代码,另外附上python代码(python不用考虑精度问题还有溢出)AC code:#inc...原创 2018-08-13 10:14:28 · 184 阅读 · 0 评论 -
Win or Freeze - Codeforce 151C
这道题转化为当q有两个或以上的质因数时,1获胜。这比先把q所有的因数求出来, 既省空间,又省时间。注意分类讨论要全面。具体分类看代码注释。AC code:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;string&gt;#include&am原创 2018-08-13 11:08:39 · 198 阅读 · 0 评论 -
Codeforces Round #503 (by SIS, Div. 2)C. Elections
AC code:#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;int n, m, x, y;long long res, ans = 1e18;multiset&amp;lt;int&amp;gt; v, p[3005];int main(){ scanf(&quot;%d %d&quot;, &am原创 2018-08-15 19:13:05 · 102 阅读 · 0 评论 -
The Phone Number-Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)-C 找数学规律,构造
题目传送门:超链接在此 具体解析看代码注释。AC code:/*构造方法:以最平均的方法(使得1-n平均分为sqrt(n)个模块,使得模块数和模块大小两者最大值最小),以这种构造方法构造出来的数列的答案取决于模块数(递增子序列的最大长度)和每个模块的大小(递减子序列的最大长度)之和 */#include&amp;lt;bits/stdc++.h&amp;gt;using namespace s...原创 2018-08-13 15:05:29 · 131 阅读 · 0 评论 -
Tavas and SaDDas - (递归)- Codeforces Round #299 (Div. 2)-B题
题目传送门 题意: 输入一个幸运数,判断他在所有幸运数中的下标。 思路: 求出所有幸运数,存入set中,因为set会自动排序。然后遍历即可。具体看代码不难。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include...原创 2018-08-26 10:47:55 · 199 阅读 · 0 评论 -
codeforces 55D D. Beautiful numbers(数位dp+数论)
题目传送门: codeforce 55D 题意简单就不说了 思路: 要用到数论的知识。详细解释,推荐一个网址:传送门 注意hash的方式有很多种。hash的目的是为减少空间浪费了。 话不多说,上代码。AC code:#include<iostream>#include<cstdio>#include<cstring>#include&l...原创 2018-08-22 14:26:12 · 288 阅读 · 0 评论 -
Numbers on the Chessboard- Educational Codeforces Round 49 (Rated for Div. 2)B题
思路: 找规律即可。AC code:#include<bits/stdc++.h>using namespace std;int main(){ int n = 0,q = 0; while(cin >> n >> q){ int me = 0,mo = 0; int start = 0; ...原创 2018-08-20 17:21:47 · 134 阅读 · 0 评论 -
Weakened Common Divisor - B题(分解质因数) Codeforces Round #505
思路: 求出第一组数据的质因数存入set中,然后对后面的数据,就是在这些质因数中筛选。可以边读入边筛选,也可以先存储在vector里面,再遍历处理。int就够了,我为了保险,用了long long. 这道题我在比赛时提交了30遍,都没有AC,赛后还改了好长时间,写代码不难,改代码(debug)才难,呜呜呜。 纤细过程看代码注释。AC code:#include&lt;bits/stdc...原创 2018-08-20 22:15:30 · 220 阅读 · 0 评论 -
Ice Cave-CodeForces 540C -BFS
题意: X代表碎的冰块,.代表完整的冰块,经过X直接掉下去,经过“.”完整冰块变成X。问从起点能否走到终点掉下去。直接BFS,如果走到了X并且他就是终点,那么返回true,如果遍历完了都没有成功则返回false.如果走到”.”,不管他是终点还是其他点,都变成X. 注意本题使用DFS会TLE,我的推测是:BFS是就近走,就像一个不断扩大的圆,而DFS是一条直线,横冲直撞,走了很多弯路。比如,起点...原创 2018-08-28 16:31:35 · 190 阅读 · 0 评论 -
Maximal Intersection- Codeforces1029 C
题目传送门 思路: 本来还以为要很复杂的算法,没想到muktiset也可以。其实计算一下复杂度,确实可以过。 复杂度是O(n*logn*logn),n = 3e5时,是1.2*e8.所以要好好利用c++的STL.AC code:#include&amp;lt;bits/stdc++.h&amp;gt; #define INF 0x3f3f3f3fusing namespace std;const...原创 2018-08-28 17:28:14 · 130 阅读 · 0 评论 -
Creating the Contest - Codeforces Round #506 (Div. 3) - B题
思路: 一次遍历,记录最大值即可。当遇到不满足条件时,从下一个开始计数。 详细过程看代码注释。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>using namespace s...原创 2018-08-25 00:46:48 · 152 阅读 · 0 评论 -
Many Equal Substrings-(KMP)-Codeforces Round #506 (Div. 3) A题
思路: 利用KMP算法中的next数组,求循环节。 具体过程看代码。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>using namespace std;const in...原创 2018-08-25 01:21:55 · 149 阅读 · 0 评论 -
Codeforces Round #506 (Div. 3) D. Concatenated Multiples - 数论
题目传送门 题意: 给定n个数,将任意两个数连接起来。求有多少对这样的组合使得组合后的数能被k整除? 思路: 暴力肯定不行,暴力就是一个一个去组合,所以会超时。那我们换一种思路,给定一个数,寻找能与他匹配的数有多少个。这样只要n的复杂度,所以我们要预处理一下(我们就是巴一中漫无目的的寻找转化为有目的的寻找,暴力就是将两者绑定在一起然后才能判断,而预处理则是两者并没有必然联系,不会不可分离)...原创 2018-08-29 21:21:48 · 169 阅读 · 0 评论 -
数学-优雅的暴力枚举-Codeforces Round #506 (Div. 3)-F. Multicolored Markers
题目传送门 题意: 给定红色砖块和蓝色砖块的数量,求他们组成实心矩形,并且至少有一种颜色本身组成矩形的最小周长。 思路: 假定一种颜色组成小矩形,然后求出它所有小于sqr(该颜色)的所有因子,并用数组存储下来,所以复杂度是O(sqrt(n)),也就是1e7,可以过。然后就是枚举总面积的因子,满足两者的长和长,宽和宽的大小关系(由于是从1-sqrt(n)枚举,所以枚举的当前值就是较少值宽,s...原创 2018-08-29 22:48:13 · 125 阅读 · 0 评论 -
Diagonal Walking v.2(找规律)-Educational Codeforces Round 50 (Rated for Div. 2)-B
昨天卡死在这一道题,想想惨。考虑太复杂了,没有抓住问题的本质,在那里乱分类讨论,还有我题目都没有看清楚,考虑了负数。总结起来,还是自己的思维能力不够,考试发挥能力也不够,卡死很久后就有点慌了。最主要还是自己的实力不够。 解题思路: 我看了别人的代码,终于靠自己理解了。我把我的理解写在了注释里面。快去看超详细的代码注释吧。AC code:#include&amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;...原创 2018-09-08 16:42:29 · 337 阅读 · 0 评论 -
CF教育场69-D(好题)-Yet Another Subarray Problem-动态规划-
题目传送门题解:考虑dp的做法,dp[i][j]代表以第i个数为右端点,长度求余m的值为j时的最大值。转移方程:dp[i][j]=dp[i-1][j-1]+aidp[i][j]=max(dp[i-1][m-1]+a[i]-k,a[i]-k)(j==0)AC code:#include<bits/stdc++.h>#define per(i,a,b) for(int i = ...原创 2019-07-23 21:03:10 · 725 阅读 · 8 评论