自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

temp06的博客

一个蒟蒻的博客QAQ

  • 博客(43)
  • 收藏
  • 关注

原创 CodeForces Educational Codeforces Round 59 题解

菜了菜了……后三题居然考场上毫无思路……%爆HYXA:Digits Sequence Dividing (1107A)乍一看是一道很难的题目,DP啊什么的……实际上只要把第一个数字单独拿出来,如果后面是两位数以上,那一定比一位数要大,满足条件;如果后面只剩一个数字,只要比较一下大小就好了。B:Digital root (1107B)有一个前置知识(找规律也可发现),就是一个数字在按...

2019-01-29 11:03:46 374

原创 CodeForces 812E Sagheer and Apple Tree

题解:很明显是一道博弈论的题目。在写这道题之前,先要学习NIM游戏和阶梯博弈的相关知识和结论。结合这两个知识,我们可以知道,在不交换节点的情况下,这个游戏的后手必胜条件是“从下往上数的奇数层”的所有节点的异或值为0。因此,我们的交换目标就是构建一个这样的树。如果一开始异或值就是0,那么有三种换法:奇数层内两个节点交换,奇数层外两个节点交换,一个奇数层内和一个奇数层外的苹果数量相同的节点交换...

2019-01-25 14:13:46 386

原创 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 161

原创 CodeForces 50C Happy Farm 5

题解:比较暴力的写法是用凸包暴力做。观察一下,可以猜想一个结论:最终的图形一定是一个八边形,也就是长方形把四个角往里缩成斜线。因为走斜线显然比走直线和横线要优,所以结论看上去还是很可靠的。然后就只要找出长方形,再算一下四个角可以缩多少,就可以了。代码如下:#include<bits/stdc++.h>using namespace std;int n,ans;in...

2019-01-25 14:05:33 138

原创 CodeForces 631C Report

题解:因为所有经理的排序影响到的都是前若干个,所以如果有一个经理排了前a个,那么在他之前排了少于a个的经理等于白排(全都白给)。所以先用一个单调栈,就可以维护出一个单调递减的区间。之后,每次就会有“当前区间和下一个区间的大小的差”这么多的数字被确定下来,而且假设原序列单调增,那么定下来的就恰好是前若干个或着后若干个。所以只要先把会被影响到的所有数字排序,用两个指针维护还没被定下来的数字是哪些就...

2019-01-25 14:03:02 129

原创 CodeForces 507C Guess Your Way Out!

题解:模拟就可以了。记录一下当前模拟到哪个点了以及下一步该往左还是往右。每次判断一下目标在哪一棵子树内,如果在要去的子树里面,那就直接走,把下一步反过来;如果不在,就说明要先把要去的子树整棵走一遍,那就把答案加上那棵子树的大小,然后走到另一棵去,下一次的方向还是和这次一样。代码如下:#include<bits/stdc++.h>using namespace std;...

2019-01-25 13:58:51 179

原创 CodeForces 437B The Child and Set

题解:暴力模拟即可。首先,有一个必须知道的知识是lowbit(x)=x&-x,有了这一条,就可以直接暴力把范围内所有数字的lowbit计算出来,也可以对每个数字从低位到高位一个个和形如1000的二进制数字取与,第一个有值的就是他的lowbit。之后从大到小排序,能加就加,最后看看加完还有没有剩下,就可以了。代码如下:#include<bits/stdc++.h>...

2019-01-25 13:55:32 193

原创 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 179

原创 CodeForces 899E Segments Removal

题解:这题解法比较多样,核心思路都是模拟,只是实现的方法不一样。我的话是采用并查集+堆来维护。并查集要维护三个值:这一团的数字个数,这一团最左边的数字,这一团最右边的数字(这些都是可以直接暴力合并的),然后用堆来维护最大的区间,每次取出来判断一下是否已经被删去,没有就计入答案然后更新并查集和堆就可以了。代码如下:#include<bits/stdc++.h>#defin...

2019-01-24 13:40:39 155

原创 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 261

原创 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 152

原创 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 102

原创 CodeForces 322B Ciel and Flowers

题解:仔细分析之后发现,先用每一种花独立组成花圈,之后用三种花各自用一个组成花圈,只有在一种情况下不是最优的——有一种花数量是3的倍数,另外两种花各自多出两朵,因为这种情况下可以通过拆掉一个花圈来多做出两个花圈。所以只要判断一下就好了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib&gt...

2019-01-24 13:22:45 244

原创 CodeForces 402E Strictly Positive Matrix

题解:骚的一批。首先一个很显然的问题是,把正数全部当成1,问题是等价的。所以这就变成了一个01矩阵。重点来了,如果把这个01矩阵看成是一张有向图的邻接矩阵,那么这个矩阵的k次方,意思就是从i到j恰好经过k条边能否到达!而这题又不要求你把k求出来,只问是否存在,所以只要整张图强连通,一定可以找到一个k满足这个条件(实在不行就把k设成两两点的路径长度的最小公倍数就行了)。于是问题转化成了给...

2019-01-23 13:58:14 159

原创 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 102

原创 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 104

原创 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 91

原创 CodeForces 366C Dima and Salad

题解:一开始想到用类似背包DP的思路去DP,然而效率上无法接受。发现这一题虽然有两个空间限制,但是并不需要求最大值,需要维护的是能否凑出来。所以考虑放弃暴力枚举每一个空间,使用vector来存储每个可能的a[i]的和有哪些可能的b[i]的和,就能减少大量无谓的判断,大大优化效率,通过这道题。代码如下:#include<bits/stdc++.h>using namespac...

2019-01-23 13:23:24 200 1

原创 CodeForces 608B Hamming Distance Sum

题解:像这种求一堆区间的某些值的和的,常常考虑成每个位置对最终答案的贡献的和,所以就考虑每个位置的贡献,稍加推算就能知道每个位置的a最终会对应哪一段的b,这个位置如果是1,那么做出的贡献就是对应区间的0的数量,反之亦然。所以只要先统计一下b的前缀和,然后扫一遍a就可以得出答案了。代码如下:#include<iostream>#include<cstdio>#i...

2019-01-23 13:18:44 135

原创 CodeForces 292E Copying Data

题解:裸上一棵线段树就可以解决了。用线段树维护一个一开始全为0的数列,每次修改操作先记录下来,把这次修改操作所影响到位置对应的区间修改为这次操作的序数(也就是第几次操作)。查询的时候,先查询这个区间里面的对应位置,看看最后影响到这个数字的操作是哪一个,找到那次操作的具体内容,对比一下就可以得到答案了。代码如下:#include<iostream>#include<...

2019-01-22 14:10:29 129

原创 CodeForces 585B Phillip and Trains

题解:一道比较简单的DP题。因为火车是一起移动的,所以火车的移动可以直接看成人物向右移动了两步,火车直接当成不动的障碍物。所以人物每一次移动三格,有可能从自己这一行、上面和下面那一行移动过来,直接DP就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include&lt...

2019-01-22 14:07:28 193

原创 CodeForces 299C Weird Game

题解:乍一看像是很难的博弈论,实际上思路相当简单。首先,因为数字可以重组,而最终两人手里一定都是n个1和0,那么比的实际上就是谁拿到的1比较多。对于两个人都是1的位置,自己拿了还能限制对方拿到1,所以一定是先抢这样的位置。而对于某个人是1的位置,不管是自己拿还是被对面拿走,产生的都是一个1的差距,所以可以直接假设每个人先拿自己的1,少的那个人拿完了就开始限制对面拿1。直接模拟就可以过了。代码如...

2019-01-22 14:03:45 116

原创 CodeForces 899D Shovel Sale

题解:这题我是打了个表找到的规律……想一想应该是对的,可以证明的,但是懒得仔细想了,感性认知一下就好啦~首先,末尾的九的个数最多有几个,是以5乘以10的若干次方来划分的。所以,5乘以10的若干次方的答案都是1。然后,随着询问数字的增长,答案以等差数列的方式随之增长,一开始公差是1,遇到1500……0这个数字之后公差变成2,然后遇到2500……0这个数字之后公差变成3,以此类推。同时,遇到9...

2019-01-22 14:00:25 91

原创 CodeForces 622C Not Equal on a Segment

题解:把每一个位置接下来第一个“和这个位置的数字不同的位置”记录下来,每次查询就是不相等就直接返回,相等就判断一下下一个位置在不在查询的区间里面就可以了。考场上脑子抽了以为这个会超时,所以写了一棵线段树来维护……感觉自己没救了QwQ代码如下:#include<iostream>#include<cstdio>#include<cstdlib>...

2019-01-22 13:54:13 117

原创 CodeForces 771B Bear and Different Names

题解:一道比较明显的构造题。先把这n个人先全部命名成不一样的名字,命名规则可以随意。然后从左到右根据YES和NO来修改这个名单,如果是NO就把这一段最右边那个人的名字改成最左边这个人的,这样这次修改就只会影响到这一段的结果,扫一遍就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib&...

2019-01-22 13:49:22 162

原创 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 112

原创 codeforces 675D Tree Construction

题解:看上去很难,实际上蛮简单的……考虑一根数轴,那么每次一个点被加入后,这根数轴上从“已经加入的点中这个点左边的点”到“已经加入的点中这个点右边的点”的这些还没被加入的点,他们被加入进来之后的父亲就会是这个点了。所以问题转化为实现覆盖就好了。这个可以用线段树维护。不过有更简单的做法,不需要真的去覆盖,只要加入的时候看一下左边的点和右边的点哪一个后被加入,那个后加入的点就是它的父亲了。这个可以用一...

2019-01-21 14:10:35 231 1

原创 codeforces 343C Read Time

题解:二分答案之后贪心即可。具体来讲,首先二分一下答案,那么问题就转化为判断这一堆指针在给定的移动距离限制下能不能读取到所有要求的格子。稍微想一下就会发现,最终一定是每个指针对应一段要求的格子,不会发生重叠。那么就只要暴力扫过去,在保证覆盖的情况下使指针尽可能扫到更右边的格子,就可以判断了。代码如下:#include<iostream>#include<cstdi...

2019-01-21 14:03:52 119

原创 codeforces 552C Vanya and Scales

题解:正解据说是进制转换……然鹅实际上分析一下就会发现,可能参与配重的砝码的个数实际上只有个,所以如果暴力计算的话,时间复杂度实际上是,因为m虽然有1e9那么大,但是在w大于等于3的时候,实际上也就只有19,是可以通过的,而w等于2的时候,答案一定是YES——因为任何一个数一定可以用二进制表示……所以只要特判一下2的情况然后暴力枚举就可以通过这道题了。代码如下:#include&...

2019-01-21 13:58:27 122

原创 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 142

原创 codeforces 298B Sail

题解:只要按照对应方向扫一遍,能走就走,不能走就停下,看看能不能走到就OK了……代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<string> #include<cstring>#include<cmath>#include...

2019-01-21 13:43:15 144

原创 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 153

原创 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 508

原创 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 212

原创 北京交通大学第七届新生程序设计竞赛题解

突然想起来还有这么个博客……决定以后每次打完比赛把会写的题写个题解在这里,也算是督促自己补题吧……毕竟是新生赛,题目大部分还是比较水的……A:相当简单的计算,数据范围并不大,每次答案加上n/3,n(剩下的钱)变成n%3+n/3,直接循环到n<3即可。B:题目看上去很复杂,仔细读题发现, 所谓反向复读其实就是每一步走的路径要求是一个回文串,也就是中心对称。也即是说,对于一个...

2018-12-30 03:04:30 738

原创 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 262

原创 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 254

原创 codeforces 1037E Trips

       题目大意:有n一开始互不认识的人聚到了一起,每天晚上,都会有两个互不认识的人相互认识。从聚会开始那一天算起,连续m天都有旅行计划。一个人参加旅行的条件是有至少k个他认识的人也参加了旅行。求每天最多有几个人参加旅行。       输入:第一行三个整数,分别是n(2<=n<=200000),m(1<=m<=200000)和k(1<=k<n)。接下来...

2018-09-03 23:57:42 260

原创 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 116

原创 codeforces 1027D Mouse Hunt

      题目大意:有一只老鼠在一个由n个房间组成的地方四处乱窜,每个房间有一个单向通道通往另外一个房间(或者这个房间本身)。现在要设置陷阱抓住这只老鼠,在每个房间设置陷阱的代价是ci。求最小代价。      输入:第一行一个数字n。第二行n个数字,表示每个房间的通道通往哪个房间。第三行n个数字,表示在每个房间设置陷阱的代价。      输出:一行一个数字,抓住老鼠所需的最小代价。 ...

2018-09-01 21:55:37 206

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除