![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解
cccccwb
一个默默挣扎中的蒟蒻QWQ
展开
-
CodeForces 402E Strictly Positive Matrix
题解:骚的一批。首先一个很显然的问题是,把正数全部当成1,问题是等价的。所以这就变成了一个01矩阵。重点来了,如果把这个01矩阵看成是一张有向图的邻接矩阵,那么这个矩阵的k次方,意思就是从i到j恰好经过k条边能否到达!而这题又不要求你把k求出来,只问是否存在,所以只要整张图强连通,一定可以找到一个k满足这个条件(实在不行就把k设成两两点的路径长度的最小公倍数就行了)。于是问题转化成了给...原创 2019-01-23 13:58:14 · 170 阅读 · 0 评论 -
CodeForces 771B Bear and Different Names
题解:一道比较明显的构造题。先把这n个人先全部命名成不一样的名字,命名规则可以随意。然后从左到右根据YES和NO来修改这个名单,如果是NO就把这一段最右边那个人的名字改成最左边这个人的,这样这次修改就只会影响到这一段的结果,扫一遍就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib&...原创 2019-01-22 13:49:22 · 174 阅读 · 0 评论 -
codeforces 940E Cashback
题解:经过分析可以知道,所有长度比c要长的分段一定没有长度为c的分段要优,所以最终答案一定由长度小于等于c的段落组成。这样就可以考虑DP了,f[i]表示到i为止的最优解,那么f[i]=min(f[i-1]+a[i],f[i-c]+a[i-c+1]……a[i]-min(a[i-c+1],……,a[i]))。直接这么转移是的,a[i-c+1]+……+a[i]可以使用前缀和优化,min(a[i-c+1]...原创 2019-01-21 14:14:52 · 119 阅读 · 0 评论 -
codeforces 675D Tree Construction
题解:看上去很难,实际上蛮简单的……考虑一根数轴,那么每次一个点被加入后,这根数轴上从“已经加入的点中这个点左边的点”到“已经加入的点中这个点右边的点”的这些还没被加入的点,他们被加入进来之后的父亲就会是这个点了。所以问题转化为实现覆盖就好了。这个可以用线段树维护。不过有更简单的做法,不需要真的去覆盖,只要加入的时候看一下左边的点和右边的点哪一个后被加入,那个后加入的点就是它的父亲了。这个可以用一...原创 2019-01-21 14:10:35 · 238 阅读 · 1 评论 -
codeforces 343C Read Time
题解:二分答案之后贪心即可。具体来讲,首先二分一下答案,那么问题就转化为判断这一堆指针在给定的移动距离限制下能不能读取到所有要求的格子。稍微想一下就会发现,最终一定是每个指针对应一段要求的格子,不会发生重叠。那么就只要暴力扫过去,在保证覆盖的情况下使指针尽可能扫到更右边的格子,就可以判断了。代码如下:#include<iostream>#include<cstdi...原创 2019-01-21 14:03:52 · 128 阅读 · 0 评论 -
codeforces 552C Vanya and Scales
题解:正解据说是进制转换……然鹅实际上分析一下就会发现,可能参与配重的砝码的个数实际上只有个,所以如果暴力计算的话,时间复杂度实际上是,因为m虽然有1e9那么大,但是在w大于等于3的时候,实际上也就只有19,是可以通过的,而w等于2的时候,答案一定是YES——因为任何一个数一定可以用二进制表示……所以只要特判一下2的情况然后暴力枚举就可以通过这道题了。代码如下:#include&...原创 2019-01-21 13:58:27 · 131 阅读 · 0 评论 -
codeforces 909C Python Indentation
题解:看上去就很像是DP题,实际上也的确是DP题。首先考虑相对暴力的DP,用f[i][j]表示到第i个代码段为止缩进是j的方案数,那么转移就只要分类讨论一下,如果这一段是f那就是f[i][j]=f[i-1][j-1],f[i][0]=0,如果是s,那么可以随意把缩进往回拉,所以这一部分应该是,其中cnt表示目前已经累计的f的数量(也就是可能的最多的缩进数)。这个写法的时间复杂度是,空间复杂...原创 2019-01-21 13:51:56 · 154 阅读 · 0 评论 -
codeforces 298B Sail
题解:只要按照对应方向扫一遍,能走就走,不能走就停下,看看能不能走到就OK了……代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<string> #include<cstring>#include<cmath>#include...原创 2019-01-21 13:43:15 · 155 阅读 · 0 评论 -
Codeforces Round #533 (Div. 2) 题解
全程围观隔壁HYX大佬四道题全部一A……反观我这边四道题罚时罚了五次……OrzA:Salem and Sticks (1105A)乍一看像是DP,仔细一看发现数据范围实在太小,数字只有一千个,波动范围和答案都只有一百,所以直接暴力枚举t找最小的结果就是答案了……B:Zuhair and Strings (1105B)要求所有字母中“由长度为k的不重叠的该字母组成的串”最多的字母有多...原创 2019-01-21 01:00:27 · 156 阅读 · 0 评论 -
CodeForces 622C Not Equal on a Segment
题解:把每一个位置接下来第一个“和这个位置的数字不同的位置”记录下来,每次查询就是不相等就直接返回,相等就判断一下下一个位置在不在查询的区间里面就可以了。考场上脑子抽了以为这个会超时,所以写了一棵线段树来维护……感觉自己没救了QwQ代码如下:#include<iostream>#include<cstdio>#include<cstdlib>...原创 2019-01-22 13:54:13 · 123 阅读 · 0 评论 -
CodeForces 899D Shovel Sale
题解:这题我是打了个表找到的规律……想一想应该是对的,可以证明的,但是懒得仔细想了,感性认知一下就好啦~首先,末尾的九的个数最多有几个,是以5乘以10的若干次方来划分的。所以,5乘以10的若干次方的答案都是1。然后,随着询问数字的增长,答案以等差数列的方式随之增长,一开始公差是1,遇到1500……0这个数字之后公差变成2,然后遇到2500……0这个数字之后公差变成3,以此类推。同时,遇到9...原创 2019-01-22 14:00:25 · 99 阅读 · 0 评论 -
CodeForces 299C Weird Game
题解:乍一看像是很难的博弈论,实际上思路相当简单。首先,因为数字可以重组,而最终两人手里一定都是n个1和0,那么比的实际上就是谁拿到的1比较多。对于两个人都是1的位置,自己拿了还能限制对方拿到1,所以一定是先抢这样的位置。而对于某个人是1的位置,不管是自己拿还是被对面拿走,产生的都是一个1的差距,所以可以直接假设每个人先拿自己的1,少的那个人拿完了就开始限制对面拿1。直接模拟就可以过了。代码如...原创 2019-01-22 14:03:45 · 130 阅读 · 0 评论 -
CodeForces 846F Random Query
题解:细节真的坑……考虑从左到右计算以每个点为右端点的区间的期望值,因为总共有个区间所以拉出去之后除一下就好。设f[i]是我们要求的东西(即期望值的分子),s[i]是第i位的数上一次出现在哪里,那么f[i]由三部分组成:对于当前位,贡献显然就是1(它本身),对于s[i]+1到i-1的部分,f[i]的这一部分是f[i-1]的这一部分分别+1(多了一个不同的数字),那么一共是i-1-s[i],对于...原创 2019-01-23 13:53:54 · 106 阅读 · 0 评论 -
CodeForces 599D Spongebob and Squares
题解:推公式的题目……不妨假定n>m,先考虑对于一对n,m来说的x是多少。考虑不同长度的正方形的数量,对于长度为y的正方形,在n,m的长方形中的个数应该是,拆开来就是,又因为假定了n>m,所以y的范围就是1到m,把这些加起来,得到,化简可得,(前面是我写题解的时候现场推的,可能会有错,这个化简式子是写题的时候推的,一定是对的)所以x就等于这一串式...原创 2019-01-23 13:46:19 · 116 阅读 · 0 评论 -
CodeForces 271D Good Substrings
题解:这题的关键在于判断重复,如果能快速判断重复就可以暴力通过。一开始考虑用map,以string为键值来记录,结果map效率太低,T了……然后考虑用哈希,结果被卡了,WA了……最后老老实实的建了一棵trie树……顺便%一下用乘1e9+7自然溢出实现哈希通过的sqy老师……代码如下:#include<bits/stdc++.h>using namespace std;...原创 2019-01-23 13:27:59 · 104 阅读 · 0 评论 -
CodeForces 366C Dima and Salad
题解:一开始想到用类似背包DP的思路去DP,然而效率上无法接受。发现这一题虽然有两个空间限制,但是并不需要求最大值,需要维护的是能否凑出来。所以考虑放弃暴力枚举每一个空间,使用vector来存储每个可能的a[i]的和有哪些可能的b[i]的和,就能减少大量无谓的判断,大大优化效率,通过这道题。代码如下:#include<bits/stdc++.h>using namespac...原创 2019-01-23 13:23:24 · 216 阅读 · 1 评论 -
CodeForces 608B Hamming Distance Sum
题解:像这种求一堆区间的某些值的和的,常常考虑成每个位置对最终答案的贡献的和,所以就考虑每个位置的贡献,稍加推算就能知道每个位置的a最终会对应哪一段的b,这个位置如果是1,那么做出的贡献就是对应区间的0的数量,反之亦然。所以只要先统计一下b的前缀和,然后扫一遍a就可以得出答案了。代码如下:#include<iostream>#include<cstdio>#i...原创 2019-01-23 13:18:44 · 147 阅读 · 0 评论 -
CodeForces Educational Codeforces Round 59 题解
菜了菜了……后三题居然考场上毫无思路……%爆HYXA:Digits Sequence Dividing (1107A)乍一看是一道很难的题目,DP啊什么的……实际上只要把第一个数字单独拿出来,如果后面是两位数以上,那一定比一位数要大,满足条件;如果后面只剩一个数字,只要比较一下大小就好了。B:Digital root (1107B)有一个前置知识(找规律也可发现),就是一个数字在按...原创 2019-01-29 11:03:46 · 388 阅读 · 0 评论 -
CodeForces 292E Copying Data
题解:裸上一棵线段树就可以解决了。用线段树维护一个一开始全为0的数列,每次修改操作先记录下来,把这次修改操作所影响到位置对应的区间修改为这次操作的序数(也就是第几次操作)。查询的时候,先查询这个区间里面的对应位置,看看最后影响到这个数字的操作是哪一个,找到那次操作的具体内容,对比一下就可以得到答案了。代码如下:#include<iostream>#include<...原创 2019-01-22 14:10:29 · 137 阅读 · 0 评论 -
CodeForces 585B Phillip and Trains
题解:一道比较简单的DP题。因为火车是一起移动的,所以火车的移动可以直接看成人物向右移动了两步,火车直接当成不动的障碍物。所以人物每一次移动三格,有可能从自己这一行、上面和下面那一行移动过来,直接DP就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<...原创 2019-01-22 14:07:28 · 209 阅读 · 0 评论 -
EOJ Monthly 2019.1——华东师范大学一月月赛C-E题题解
这一场菜到扣脚.jpg膜爆HYX大佬.gif A:唐纳德先生与领土扩张待补B:唐纳德先生与网络降级计划待补C:唐纳德先生与这真的是签到题吗 很明显是一道构造题……假设原序列为不递减的序列b[1],b[2]……,b[n],给出的序列为a[1],a[2],……,a[n*(n-1)/2]。那么显然,a[1]=b[1]+b[2],a[2]=b[1]+b[3],而b[...原创 2019-01-19 01:31:01 · 514 阅读 · 0 评论 -
codeforces 再见场 Good Bye 2018 前四题题解
一场下来只出了四题,后四题竟毫无思路……还是太菜了十一分钟出四题,膜爆tourist A:New Year and the Christmas Ornament (1091A)直接把a+2,b+1,c拿出来取最小值就是最终答案里面最大的那个数的上限了,然后乘三减三输出即可。B:New Year and the Treasure Geolocation (1091B)考虑到题...原创 2018-12-31 11:27:41 · 216 阅读 · 0 评论 -
CodeForces 631C Report
题解:因为所有经理的排序影响到的都是前若干个,所以如果有一个经理排了前a个,那么在他之前排了少于a个的经理等于白排(全都白给)。所以先用一个单调栈,就可以维护出一个单调递减的区间。之后,每次就会有“当前区间和下一个区间的大小的差”这么多的数字被确定下来,而且假设原序列单调增,那么定下来的就恰好是前若干个或着后若干个。所以只要先把会被影响到的所有数字排序,用两个指针维护还没被定下来的数字是哪些就...原创 2019-01-25 14:03:02 · 141 阅读 · 0 评论 -
CodeForces 507C Guess Your Way Out!
题解:模拟就可以了。记录一下当前模拟到哪个点了以及下一步该往左还是往右。每次判断一下目标在哪一棵子树内,如果在要去的子树里面,那就直接走,把下一步反过来;如果不在,就说明要先把要去的子树整棵走一遍,那就把答案加上那棵子树的大小,然后走到另一棵去,下一次的方向还是和这次一样。代码如下:#include<bits/stdc++.h>using namespace std;...原创 2019-01-25 13:58:51 · 192 阅读 · 0 评论 -
CodeForces 437B The Child and Set
题解:暴力模拟即可。首先,有一个必须知道的知识是lowbit(x)=x&-x,有了这一条,就可以直接暴力把范围内所有数字的lowbit计算出来,也可以对每个数字从低位到高位一个个和形如1000的二进制数字取与,第一个有值的就是他的lowbit。之后从大到小排序,能加就加,最后看看加完还有没有剩下,就可以了。代码如下:#include<bits/stdc++.h>...原创 2019-01-25 13:55:32 · 201 阅读 · 0 评论 -
CodeForces 702E Analysis of Pathes in Functional Graph
题解:因为每个点只有一条出边,所以实际上每个点开始的路径只有一条。因此可以采用倍增的思路,先预处理每个点走步之后的答案,之后对每个点只要用这些来凑出长度为k的路径就可以了。代码如下:#include<bits/stdc++.h>using namespace std;int n;int f[100010],w[100010],ff[100010][40];lon...原创 2019-01-24 13:42:41 · 186 阅读 · 0 评论 -
CodeForces 899E Segments Removal
题解:这题解法比较多样,核心思路都是模拟,只是实现的方法不一样。我的话是采用并查集+堆来维护。并查集要维护三个值:这一团的数字个数,这一团最左边的数字,这一团最右边的数字(这些都是可以直接暴力合并的),然后用堆来维护最大的区间,每次取出来判断一下是否已经被删去,没有就计入答案然后更新并查集和堆就可以了。代码如下:#include<bits/stdc++.h>#defin...原创 2019-01-24 13:40:39 · 164 阅读 · 0 评论 -
CodeForces 863D Yet Another Array Queries Problem
题解:表面上看是一道大数据结构题,然鹅询问的数量只有100,所以n*m的范围最多只到2e7,这是可以接受的……所以只要暴力就好了,对于每一个询问,反向顺着所有影响到他的操作推回去就可以了。代码如下:#include<bits/stdc++.h>#define mod 1000000007using namespace std;int n,q,m;int a[20...原创 2019-01-24 13:37:55 · 270 阅读 · 0 评论 -
CodeForces 914C Travelling Salesman and Special Numbers
题解:n的范围一看上去相当吓人,不过稍加思考就会发现进行一次操作之后,n一定会小于等于1000……所以只要把1000以内的每个数分别需要多少次操作暴力预处理出来,就能知道有哪些1的个数可能成为答案。然后就是对于每种可能的1的个数,从左到右扫一遍,如果是0就跳过,如果是1,那么这一位取0,后面位数只要取够1的个数都能成为答案,用组合数计算一下就可以了。要注意的是,1的数量为1个时,只...原创 2019-01-24 13:35:48 · 163 阅读 · 0 评论 -
CodeForces 540D Bad Luck Island
题解:一道比较明显的DP题。考虑通过计算岛上剩余生物数量的各种情况分别的出现概率来得到答案,那么状态的表示方法和转移方程就比较明显了:f[i][j][k]表示岛上三种生物剩余数量分别是i、j、k的情况出现的概率,那么他可以分别从f[i+1][j][k]、f[i][j+1][k]、f[i][j][k+1]转移过来,分别代表发生了一场战斗之后死了某一种生物之后变为当前状况的概率。最后把只有i不为0...原创 2019-01-24 13:31:24 · 113 阅读 · 0 评论 -
CodeForces 50C Happy Farm 5
题解:比较暴力的写法是用凸包暴力做。观察一下,可以猜想一个结论:最终的图形一定是一个八边形,也就是长方形把四个角往里缩成斜线。因为走斜线显然比走直线和横线要优,所以结论看上去还是很可靠的。然后就只要找出长方形,再算一下四个角可以缩多少,就可以了。代码如下:#include<bits/stdc++.h>using namespace std;int n,ans;in...原创 2019-01-25 14:05:33 · 150 阅读 · 0 评论 -
CodeForces 803E Roma and Poker
题解:比较简单的DP题。因为n和k都只有1000,所以n*k无论是空间还是时间都可以接受。考虑用f[i][j]表示到第i个字母为止赢得钱是j的情况,因为可能有负数,所以第二维在实现的时候要加上1000。至于怎么求出解,只要在DP的时候记录一下当前状态是从哪一个状态转移过来的,然后从后往前推就可以了。代码如下:#include<bits/stdc++.h>using na...原创 2019-01-25 14:08:38 · 170 阅读 · 0 评论 -
CodeForces 812E Sagheer and Apple Tree
题解:很明显是一道博弈论的题目。在写这道题之前,先要学习NIM游戏和阶梯博弈的相关知识和结论。结合这两个知识,我们可以知道,在不交换节点的情况下,这个游戏的后手必胜条件是“从下往上数的奇数层”的所有节点的异或值为0。因此,我们的交换目标就是构建一个这样的树。如果一开始异或值就是0,那么有三种换法:奇数层内两个节点交换,奇数层外两个节点交换,一个奇数层内和一个奇数层外的苹果数量相同的节点交换...原创 2019-01-25 14:13:46 · 399 阅读 · 0 评论 -
北京交通大学第七届新生程序设计竞赛题解
突然想起来还有这么个博客……决定以后每次打完比赛把会写的题写个题解在这里,也算是督促自己补题吧……毕竟是新生赛,题目大部分还是比较水的……A:相当简单的计算,数据范围并不大,每次答案加上n/3,n(剩下的钱)变成n%3+n/3,直接循环到n<3即可。B:题目看上去很复杂,仔细读题发现, 所谓反向复读其实就是每一步走的路径要求是一个回文串,也就是中心对称。也即是说,对于一个...原创 2018-12-30 03:04:30 · 755 阅读 · 0 评论 -
ACM-ICPC 2018 沈阳赛区网络预赛 F题 Fantastic Graph
题目大意:给定一个二分图,左边有n个点,右边有m个点,图中有k条边,问能否删去其中若干条边或不变,使得每个点所连的边数量都在给定的区间[L,R]内。 输入:多组数据,最多三十组。对于每组数据,第一行三个数字n(1<=n<=2000),m(1<=m<=2000)和k(0<=k<=6000);第二行两个数字L和R(0<=L<...原创 2018-09-08 22:19:27 · 271 阅读 · 0 评论 -
codeforces 401D Roman and Numbers
题目大意:给出n和m,求有多少数字满足三个条件:1、由n各位数字打乱重组而成;2、没有先导0;3、能整除m。 输入:一行两个整数n(1<=n<10^18)和m(1<=m<=100)。 输出:一行一个整数表示答案。 题解: 状压DP可过。 考虑每一位,用一组桶记录下这一位使用某一个数字能产生的模...原创 2018-09-07 09:27:12 · 270 阅读 · 0 评论 -
codeforces 1037E Trips
题目大意:有n一开始互不认识的人聚到了一起,每天晚上,都会有两个互不认识的人相互认识。从聚会开始那一天算起,连续m天都有旅行计划。一个人参加旅行的条件是有至少k个他认识的人也参加了旅行。求每天最多有几个人参加旅行。 输入:第一行三个整数,分别是n(2<=n<=200000),m(1<=m<=200000)和k(1<=k<n)。接下来...原创 2018-09-03 23:57:42 · 268 阅读 · 0 评论 -
hdu 3068 最长回文
题面:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题解: Manacher算法模板题,拿来练手用的。 我是看着这个教程学的Manacher:https://www.cnblogs.com/z360/p/6375514.html 代码:#include<iostream&...原创 2018-09-02 10:31:52 · 125 阅读 · 0 评论 -
codeforces 1027D Mouse Hunt
题目大意:有一只老鼠在一个由n个房间组成的地方四处乱窜,每个房间有一个单向通道通往另外一个房间(或者这个房间本身)。现在要设置陷阱抓住这只老鼠,在每个房间设置陷阱的代价是ci。求最小代价。 输入:第一行一个数字n。第二行n个数字,表示每个房间的通道通往哪个房间。第三行n个数字,表示在每个房间设置陷阱的代价。 输出:一行一个数字,抓住老鼠所需的最小代价。 ...原创 2018-09-01 21:55:37 · 216 阅读 · 0 评论 -
ACM-ICPC 2018 南京赛区网络赛 G题 Lpl and Energy-saving Lamps
题目大意:有n个房间,第i个房间内有ki盏白炽灯。现在准备将这些白炽灯全部换成节能灯。管家每个月购买m盏节能灯,之后会按照房间列表一间一间地查看是否需要更换。当管家遇见一个尚未更换节能灯的房间,并且他手上有足够多的节能灯时,他会将房间内的所有白炽灯全部替换为节能灯。不管他路过这个房间后是否换了灯,他都会继续前往下一个房间。如果他走过所有房间之后手中仍有多余的节能灯,他将会把这些节能灯...原创 2018-09-01 19:45:45 · 367 阅读 · 0 评论