codeforces
codeforces
昵称很长很长真是太好了
这个作者很懒,什么都没留下…
展开
-
CF702F T-Shirts (排序+平衡树)
题意:有nnn种 T 恤,每种有价格 cic_ici 和品质 qiq_iqi。有 mmm 个人要买 T 恤,第 iii 个人有 viv_ivi 元,每人每次都会买一件能买得起的 qiq_iqi 最大的 T 恤。一个人只能买一种 T 恤一件,所有人之间都是独立的。问最后每个人买了多少件 T 恤?如果有多个 qiq_iqi 最大的 T 恤,会从价格低的开始买。题解:对所有衣服按照q[i]q[i]q[i]从大到小排序对每个人维护a[i]a[i]a[i]表示其剩余的钱,b[i]b[i]b原创 2021-09-15 00:12:54 · 279 阅读 · 0 评论 -
Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma (线段树维护区间连续问题)
题意:操作1:把x位置的数字修改成y。操作2:查询[l,r]之间不下降序列的个数。题解:线段树维护区间和问题 (这是套路,想不到只能说做题少别打我) 。用五个变量进行维护。sum区间总个数llen从左边这个数字开始往右最长不下降序列长度(往右端最长延伸)rlen从右边这个数字开始往左最长不上升序列长度(往左端最长延伸)lnum这个区间最左端的数字rnum这个区间最右端的数字很明显lnum和rnum很好维护,直接pushup即可。如果左子树的右端小于等于右子树的左端。sum则需要在两原创 2021-09-06 01:41:23 · 308 阅读 · 0 评论 -
Alyona and a tree (树上倍增+差分)
题意: 来源(洛谷翻译题解:首先先转化一下问题,题目问当前结点(u)的子树中有多少个孩子(设为v)满足dis(u,v)<=a[v],那么我们可以统计每个结点分别对哪些结点做出了贡献。首先考虑暴力的解法,枚举每个点,针对于每一个结点,不断的去往上找他的父亲结点,并且在找的过程中给每个结点+1的权值,直到找到的结点跟当前结点的距离大于当前结点为止。这样的时间复杂度最差是n^2。我们发现一步一步的往上找,显然很暴力,对于这种题目,我们可以用类似于二分的方法去查找,那也就是倍增了,显然我们可以快速原创 2021-05-06 14:08:38 · 610 阅读 · 2 评论 -
Educational Codeforces Round 105 (Rated for Div. 2) C. 1D Sokoban
题解:我们可以得知,人可以往左边推箱子或者往右边推。所以我们可以把所有负数放在一起,所有正数放在一起,也就是左边一堆,右边一堆。然后开始枚举每一个special positions,假设这个点之前的所有箱子都被推到了这个点和这个点之前连续的几个点,然后查询这一段长度覆盖了几个special positions(用二分查找即可),然后再看看这个点之后,是否有箱子就在special positions上,这两个值加起来,取最大的即可。这里我是用了multiset来水了一下二分,相同操作也可以二分来操作。原创 2021-03-03 12:21:54 · 307 阅读 · 2 评论 -
Codeforces Global Round 13 E. Fib-tree
E. Fib-tree题意:给你一棵树,问是不是斐波那契树:这棵树要满足1.本身的结点个数为斐波那契数。2.断掉一条边,变成两棵树,两棵树的大小分别都是斐波那契数。问能不能通过不断断掉一条边(过程保证他是斐波那契树),把这颗树分解成大小n个为1的树。题解:树上一顿乱秀。因为任意一种切法都可以。因为我们要把树切成大小为1的树,假设有两种可以切的边,现在不切,之后也得切,所以切任意一条都可以。那么我们模拟提议操作即可。首先先将斐波那契数映射到数组里面,以便于O(1)查询。我们开始遍历树,原创 2021-03-01 23:51:10 · 257 阅读 · 5 评论 -
New Year Tree(dfs序+线段树+二进制)
题意: 给出一棵 n个节点的树,根节点为 1。每个节点上有一种颜色 ci。m次操作。操作有两种:1 u c:将以 u为根的子树上的所有节点的颜色改为c。2 u:询问以 u为根的子树上的所有节点的颜色数量。题解:一看题目好像是个dfs序+线段树的板子题,但是需要思考的是,怎么查询一段区间的颜色数目呢?如果把这个问题解决了的话,这个题目也就相应的解决了。看到颜色数目好像并不多,嗷,极好,60(2^60)正好在ll的范围内。我们可以考虑每一位储存一种颜色,返回值为这段区间的**(或)|**。这样子原创 2021-01-15 12:07:37 · 193 阅读 · 0 评论 -
[codeforces] 383C Propagating tree(dfs序+线段树)
题意:给你一棵n个结点的树, 以1为根。每个结点有点权。有m次操作:1.x结点权值 +val,x的儿子权值 −val,x的孙子们 +val,以此类推。2.询问x的点权;题解:我们首先跑一边dfs序,顺便求除每个结点的深度。我们把他分成两颗线段树,深度为奇数的在第一颗上,深度为偶数的在第二课上。我们每次对两颗线段树同时操作。第一颗线段树只进行+操作,第二棵线段树只-操作。当我们询问某个点时,我们只需要判断一下这个点的奇偶,决定查询哪颗树即可。/*Keep on going Never gi原创 2020-11-20 13:53:16 · 185 阅读 · 0 评论 -
Codeforces Round #645 (Div. 2)(D.The Best Vacation)
题目链接:https://codeforces.com/contest/1358/problem/D思路:双指针+前缀和前缀和主要处理了两组数据:sum[]是某月到某月的天数,ans[] 代表某月到某月能得到得hug数然后我们通过双指针的方法来遍历整个范围,当sum[r]-sum[l-1]小约x时,我们r++;当sum[r]-sum[l-1]<=x时我们就可以统计一下当前范围的最大天数,但是要注意的一点这里假如x=5,一共有5个月,天数分别是1 1 1 1 20 这个时候我们在移动的时候要原创 2020-05-27 10:07:51 · 1256 阅读 · 5 评论 -
Codeforces Round #640 (Div. 4)(ABCDEG题解)
文章目录A. Sum of Round NumbersB - Same Parity SummandsC - K-th Not Divisible by nD - Alice, Bob and CandiesE - Special ElementsF. Binary String ReconstructionG - Special PermutationA. Sum of Round Numbers题解:把他一个整数拆分,模拟一波即可 #pragma GCC optimize(3,"Ofast"原创 2020-05-10 02:08:29 · 282 阅读 · 0 评论 -
Codeforces Round #650 (Div. 3)(A-F1)题解
A. Short Substrings题解:按题意模拟即可/*Keep on going Never give up*/#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>const int maxn = 3100;const int MaxN = 0x3f3f3f3f;const int MinN = 0xc0c0c00c;typedef long long ll;const int mod = 100原创 2020-06-18 11:05:05 · 347 阅读 · 0 评论 -
Codeforces Round #649 (Div.2)题解
文章目录A - XXXXXB - Most socially-distanced subsequenceC - Ehab and Prefix MEXsA - XXXXX题意:这个题让你找从开头或者是结尾去掉最少几个数以后总和是不能整除给定的x思路:如果这个序列总和可以整除给定的x的话,那么我们只要找到一个数可以不被x整除,把他从序列中取出,那么序列中剩余的总和也就不能被整除了。分别从前从后开始搜索即可:/*Keep on going Never give up*/#pragma GCC opt原创 2020-06-14 11:14:21 · 2964 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2)题解 A-D
文章目录A - Matrix GameB - Trouble SortC - Rotation MatchingD - Solve The MazeA - Matrix Game题解:其实这个题细细一想,剩下可以化1的位置的数量就是整行不包含1的行数或整列不包含1的列数的两者最小值,最后在判断一下奇偶即可。 /*Keep on going Never give up*/ #pragma GCC optimize(3,"Ofast","inline") #include <b原创 2020-06-08 11:25:33 · 188 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2)部分题解
文章目录A - Common SubsequenceB - Sequential NimC1 - Prefix Flip (Easy Version)C2 - Prefix Flip (Hard Version)A - Common Subsequence题解:因为a数组和b数组里面的元素值都小于1000,所以我们可以开一个数组来存对于每个元素出现过的情况,最后遍历一遍1-1000,检查是否有同时出现的值即可/*Keep on going Never give up*/#pragma GCC op原创 2020-07-22 10:15:47 · 415 阅读 · 0 评论 -
Trip to Saint Petersburg CodeForces-1250 C
题解:我们首先枚举每个日期i,对于每个日期,对[1,i]区间内的值减去k,代表新增加了一天花费值如果有了收入我们就把区间[第一天开始,这个工作开始得日子]加上val。举个栗子:首先:看这张图,我们先假设他没有活干,那么假设经过了6天,每天花费对应的值为上图,1.如果你在第一天去了那个地方,那么到了第六天,对应得花费就是数字1下面对应得数字2.如果你在第二天去了那个地方,那么到了第六天,对应得花费就是数字2下面对应得数字……6.如果你在第六天去了那个地方,那么到了第六天,对应得花费就是数字原创 2020-07-09 18:14:49 · 248 阅读 · 0 评论 -
Codeforces Global Round 9 A-D题解
文章目录A - Sign FlippingB - Neighbor GridC - Element ExterminationD - Replace by MEXA - Sign Flipping题意:问你至少有(n-1)/ 2个a[i+1]-a[i]大于等于0,至少有(n-1)/ 2个a[i+1]-a[i]小于等于0,你可以变化每个数的正负。题解:这样的话就可以正负交替输出了。/*Keep on going Never give up*/#pragma GCC optimize(3,"Ofa原创 2020-07-05 11:34:48 · 228 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3)部分题解
文章目录A - Required RemainderB - Multiply by 2, divide by 6C - Move BracketsD - Zero Remainder ArrayE1 - Reading Books (easy version)A - Required Remainder题解:这个题应该是有很多种解法,这里提供一种比较暴力的方法,我们先把ans去取一个比较大的值,如果这个值大于n的话我们就让他减去一个x,因为减去一个x是对取模结果没有影响的,如果ans小于n的话,直接输出原创 2020-06-29 16:22:10 · 420 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)部分题解
A - Donut Shops题解:1.我们首先特判一下包装盒里面只有一个物品的情况,如果只装了一个物品,那我们就直接比较这两个物品的单价即可。2.如果盒子里面装的不止是一键物品,那么我们就需要比较一下之间的单价了,如果价格相等,那么第一件物品肯定有优势(因为它可以一个一个卖),输出1 -1即可;如果第一件价格小于第二件价格,那么第二件物品就会“一无是处”,直接输出1 -1即可,如果第一件物品价格小于第二件物品价格,且单价要大于第二件物品,那么就可以输出1 b。(恰好为b件,肯定买第二件物品话算,因为原创 2020-06-26 02:21:11 · 1989 阅读 · 0 评论 -
Codeforces Round #651 (Div. 2) 部分题解
A - Maximum GCD/*Keep on going Never give up*/#pragma GCC optimize(3,"Ofast","inline")#include <bits/stdc++.h>const int maxn = 1e6+10;const int MaxN = 0x3f3f3f3f;const int MinN = 0xc0c0c00c;typedef long long ll;const int mod = 100000000;usin原创 2020-06-21 12:33:08 · 451 阅读 · 0 评论 -
CF570D Tree Requests
题意:给定一个以1为根的n个节点的树,每个点上有一个字母(a-z),每个点的深度定义为该节点到1号节点路径上的点数.每次询问 a,b 查询以a为根的子树内深度为b的节点上的字母重新排列之后是否能构成回文串.题解:dfs序+状态压缩+二分查找这个题用到了很多小技巧,比如说异或前缀和等等。我们首先对他跑一边dfs序,记录下每个点的时间戳。把每个层点入度的时间戳放在一起,因为结点到某层,也要保证这一层是他的孩子。所以我们用这个时间戳来确定到底是这一层的哪一段。用二分查找分别找入度结点和出度结点,从原创 2020-11-18 21:18:31 · 127 阅读 · 0 评论 -
CF1006E Military Problem
题意:给你一棵树,有q次查询,每次查询第n个结点的他的子树按照dfs序第x个元素是什么?题解:一道dfs序的裸的题目。首先需要一个数组存放第i个结点在dfs序中的位置再需要一个数组来存放dfs序的顺序在需要一个数组来存放一个结点子树的大小。(用来判断是否需要输出-1)每次查询首先判断他的子树大小是否符合要求如果符合要求再找到这个结点在dfs序中的位置。然后利用存放dfs序顺序的数组瞬移 k-1 位,输出此元素即可。利用这三个数组,即可再O(n)的时间复杂度下解决问题。/*Keep on原创 2020-11-17 16:51:20 · 141 阅读 · 0 评论 -
CF888G Xor-MST (01字典树+MST)
题意:给你n个数,每个数有一个值。问你这n个数的最小生成树为多少,两点之间的边权为异或值。题解:参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸。我们每次去合并两个点,要想尽量使全值小,对于一颗字典树来说,就要尽量先合并越靠树叶的结点,一个叶子结点对应一个结点。那么我们对于一颗字典树来说,我们把他运用到最近公共祖先上,把所有最近公共祖先的结点来说,他有两个孩子,也就是要练的结点就是所有的最近公共祖先的结点。对于每一个公共祖先结点,我们对其左右儿子尽心递归查找,尽量找到最原创 2020-11-04 00:17:12 · 173 阅读 · 0 评论 -
Perfect Security (01字典树&&删除点)
题意:第一行给你一个n第二行给你n个数字 分别是a[1],a[2]…a[n]。第三行给你n个数字 分别是b[1],b[2]…b[n]。问:第三行的序列可自由排列,要求排列之后的顺序 a[1]b[1],a[2]b[2]…a[n]^b[n]的字典序最小。题解:因为b数组可以自由排列,那么我们把b数组先生成一个字典序。要想字典序最小,那么根据贪心的思想,我们a[1]要与b中的某个数异或后值最小。那么我们再遍历一遍a数组每次找出当前能组合的最小值。因为每次组合后,我们需要删除b中一个元素,那么b原创 2020-10-30 23:23:32 · 211 阅读 · 0 评论 -
Vitya and Strange Lesson (01字典树)
题意:给定一组数,然后对所有的数进行异或操作m次异或操作,问你每次操作后,没有出现过的最小的非负整数题解:首先需要一个性质(ab)c=a(bc);所以我们没有必要对于所有的数进行异或操作。我们只需要设一个ans=0,每次用输入进来的数于ans进行异或即可。其次,我们把没有出现过的数字加入进字典树,这样的话我们从高位到低位寻找与当前ans按位 比较相同的数字,如果不相同那么我们就给 返回值加上当前位的值。最后返回值极为最小mex。/*Keep on going Never give up*//原创 2020-10-30 14:08:16 · 146 阅读 · 0 评论 -
The XOR Largest Pair(01trie模板题)
题意:给你一堆数,问你从里面跳出来两个数异或和最大。(菜鸡第一次用字典树做题)题解:之前没用过字典树做题,,看了大佬的题解,才知道字典树还有这种妙用。对于二进制,如果我们想让它最大,(一点贪心的小思想)那么最高位的1 我们是要尽量保留的,(再就是保留次高位…)。对此我们建立一颗字01字典树,一条链对应的是一棵树的二进制形式,每次查询一个数字与已经放进去的最大异或值,**如何异或最大,就是在二进制下 与查询的这个数字 每位尽可能不同 **当然前提下是从 最高位到最低位进行遍历(最高位权重大原创 2020-10-29 21:38:57 · 125 阅读 · 0 评论 -
CF1132D Stressful Training (binary search)(greedy)
题意:有n台电脑,每台电脑,他的初始电量为a[i],每分钟消耗电量为b[i]你有一个功率为的充电器,每分钟可以使一台电脑电量增加x。问,x至少为多大才能保证在[0,k)的时间内任意一台电脑电量都不为负题解:我们对于这个x进行二分操作。那么这个check函数怎么写呢首先我们想如果保证每天电脑都尽量都有电,那么我们肯定是对 最快没电的那台电脑进行充电(贪心策略),如何找出最快没有电的那台电脑,因为我们需要遍历完1-k 分钟,每次都要找到最快没有电的那台电脑,如何操作呢? 那肯定是优先队列了,我们对优先原创 2020-10-03 11:23:59 · 133 阅读 · 0 评论