
cf精选
杪渊探骊
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
cf Round #775 Div.2 -D【逆向思维+简单数学】
Date:2022.03.06题意:给一个数组,是否能满足其中任意两个元素x>=y保证⌊xy⌋\lfloor \frac{x}{y} \rfloor⌊yx⌋存在于数组中。思路:打表每个数的倍数(保证<=最大值),找性质。以样例中的1 3 3 7为例,打表如下:1 2 3 4 5 6 73 63 67我们再以3 6为例,分别是3×1、3×23\times1、3\times23×1、3×2,这里的1、2即代表数组中是否能有数???使得?/3==1、2?/3==1、2?/3==1、2原创 2022-03-15 17:44:19 · 770 阅读 · 0 评论 -
cf1651 Educational 124 (Rated for Div. 2) -D【多源BFS】
Date:2022.03.10题意:找出离着每个点曼哈顿距离最近的、且不在给定的这n个点内的点。思路:核心是将给定的所有点按状态分为两种情况。①当前点周边四格都被占。离着它最近的点,等同于离着“四个被占的周边点”最近的点(一个递归过程),因此四边都被占的一定是由某一个四边有未被占的点拓展到的。②当前点周边四格有未被占的情况。未被占的点离着最近,因此可直接加入队列,拓展那些四周都被占的了点。由此显然多源bfs。有些乱,各部分作用:s[i]:s[i]:s[i]:存每个结点的(x,y)(x,y)(原创 2022-03-12 16:41:31 · 471 阅读 · 0 评论 -
cf1360 Round #644 Div3-F【思维】
Date:2022.01.29题意:给定n个字符串,求解一个串,使所得串与n个串中的每一个至多含有一个不同的字符。不存在输出-1。思路:开始硬枚举半天,首先发现任意两个串间存在>2个不同字符一定不满足,其次枚举改变不同的字符,在与其它匹配,大可不必。直接枚举每个串在每个位置是其它字母时的衍生串,map记录字符串被衍生的次数,每一个都<=n(因为最多被n个串中的每一个衍生1次),找到被每个串衍生1次即总共被衍生n次的串即可。此外注意每个串原串也算如map,但只算入一次。代码如下:#inc原创 2022-01-30 14:46:28 · 432 阅读 · 0 评论 -
cf1037 Manthan, Codefest 18 Div1+2 -D【BFS】
Date:2022.01.26题意:给定n个点n-1条边,构成一个图,初始点为1号点,求给定序列能否是该图中以1为起点的某个BFS序列。思路①:求出每个点的层数,如果存在逆序则不满足。喜提一发WA4,易知少考虑了一种情况,即:61 21 52 32 45 61 5 2 3 4 6这里每个点都在正确的层,但是层之间的顺序搞混了,怎么判断顺序?思路②:我们试着按给定顺序找到合法序列,每次判断当前元素后的若干元素是否满足与当前元素有连边,没有弹出找下一个元素;有则加入得到的序列。若最后按给原创 2022-01-27 22:11:34 · 154 阅读 · 0 评论 -
cf954 Educational Round 40 Rated for Div2-D【最短路】
Date:2022.01.22题意:n个点m条边,起点为s终点为t,求最多连上多少条边能使s->t的距离不变近。思路:好简单的2d。两次Dijkstra,分别以sss和ttt为起点,距离分别为dist1[]、dist2[]dist1[]、dist2[]dist1[]、dist2[]。之后O(n2)O(n^2)O(n2)枚举任意两点,如果两点间有边则跳过;如果无边且加上这个边<i,j><i,j><i,j>之后,如果dist1[i]+dist2[j]+1dist1原创 2022-01-23 12:03:31 · 331 阅读 · 0 评论 -
cf723 Round #375 Div2-D【Floodfill+搜索】
Date:2022.01.19题意:给定n*m的岛,’.‘表示此处为水,连着的水为湖。连着边界的所有水为海,不算入湖。给定k,要求保留k个湖,至少需要填多少格像’.‘这样水,并输出填湖之后的岛。思路:先预处理所有连着海的点,都不算入湖。之后找到每个未被访问的点,dfs1找到它所在的连通块标记并为访问过。之后每个连通块取一个代表,bfs版Floodfill找到每个连通块的大小,加入vector中排序,保留最大的k个,其余算累加即为需要填补的’.'的数量;再找到需要的连通块,dfs2填上每个坑输出。(直接原创 2022-01-21 19:19:17 · 150 阅读 · 0 评论 -
cf616 Educational Round 5 Div2-D【双指针】
Date:2022.01.20题意:k-good定义为含<=k个不同元素的连续子序列长度,给定一个序列求最长的k-good序列的左右下标。思路:双指针每次记录左右端点,记录不同元素数量为res,res每次分三种情况,即:①<k ②>k ③==k,分别移动l、r并更新每个元素的个数和res,且当①和③时将l、r记录,最后输出r-l+1最大的那组下标。代码如下:#include <bits/stdc++.h>using namespace std;const int原创 2022-01-21 18:59:22 · 223 阅读 · 0 评论 -
cf1077 Round #521 Div3-D【二分】
Date:2022.01.21题意:给定一个数组s,求出长度为k的数组t,保证每次从s中删去t数组中的k个元素,求在s中删除的元素数量最多是多少。思路:循环元长度为k,删除的总数一定是k的整数倍,称这个整数为“轮数”,我们二分“轮数”,找到最恰当的“轮数”,即:使“轮数”在满足条件的前提下最大,这样删除的元素数量最多。此外注意循环元中只有k个元素,多余的舍弃不输出。代码如下:#include <iostream>#include <cstring>#include &l原创 2022-01-21 18:39:23 · 89 阅读 · 0 评论 -
cf659 Round #346 Div2-E【DSU+判环】
Date:2022.01.18题意:n个点m条边,每两点之间至多有一条边,开始是无向的,现在要变成有向的,并定义所有入度为0的城市为“分离”的,求最少的分离的城市有多少个。思路:首先若干个连通的城市一定是有向图中的一个连通块,经过模拟,发现只要这个连通块中总边数>=总点数即可根据改变某些边的方向从而让每个点都不“分离”,又因为每两个点之间至多一条单向边,因此若这个连通块中总边数>=总点数那么它一定存在环。因此核心任务是判每个连通块中是否有环,有环对答案无贡献,无环贡献为1。此外,这里学到了原创 2022-01-18 23:21:26 · 447 阅读 · 0 评论 -
cf1627 Round #766 Div2-C【图论+DFS】
Date:2022.01.17题意:给定一个树,给每个边加权能不能构造出任意<=2个边相加都是质数。能输出对应边的方案,不能输出-1。思路:首先单独一个边是质数很好办,每个边都是质数即可。在此前提下,怎么才能保证每两个边相加都是质数?不难发现,一旦存在度数>=3的点就不能满足,因为质数只有偶质数2和奇质数,任意两个奇数相加为偶数且一定是合数,只有一个奇质数和一个偶质数相加才能保证和为质数,因此不存在任意一个点连着三条边且这三条边两两加和都为质数的情况。由此,每个点的度数只能<=2,又原创 2022-01-18 11:06:00 · 435 阅读 · 0 评论 -
cf1566 Global Round 16-D1【树状数组】、D2【离散化+模拟】
Date:2022.01.17题意:n∗mn*mn∗m个座,n∗mn*mn∗m个人。每个人都有近视度,近视度小的坐的座位下标靠前,因此相对位置固定。每个人要找到他所在的行,并进入所在的列,在此过程中,定义这个人的“不方便程度”为他在这一行往里走的过程中,经过了多少个比他下标小的人。求总的不方便度最小是多少。D1:n=1n=1n=1,其它同D2。D2:思路①:D1只有一行,贪心【贪心见下】放进去,暴力(不如练练BIT板子)。代码如下:#include <bits/stdc++.h>u原创 2022-01-17 22:45:32 · 664 阅读 · 0 评论 -
cf1452 Educational Round 98 Div2-D【DP+同余】
Date:2022.01.15题意:有n+2n+2n+2个塔编号从[0,n+1][0,n+1][0,n+1],在每个塔上建一个通讯器的概率都是12\frac{1}{2}21,设每个通讯器传送半径为ppp,所在下标为iii,即能传送讯息给[i−(p−1),i+(p−1)][i-(p-1),i+(p-1)][i−(p−1),i+(p−1)]中的所有元素。要求:①不能给下标为000和n+1n+1n+1的塔传送消息。②给下标为[1,n][1,n][1,n]的所有塔都能收到消息,且只收到111次。求方案数。原创 2022-01-15 16:51:16 · 348 阅读 · 0 评论 -
cf1607 Round #753 Div3-E【构造】
Date:2022.01.14题意:n*m的棋盘,给定操作序列,找到操作次数不出棋盘的最大步数下的起点。思路:记录四个方向的最大步数方法如下:①像一个方向走一步,先判断反方向的步数是否是正的,若是反方向先-1,直到反方向为0,本方向+1。②每步记录每个方向的最大步数。特别注意,如果两个正反方向的最大步数均为0,则若为左右方向则以m为起点;若为上下方向则以n为起点。代码如下:#include <iostream>#include <cstring>#include原创 2022-01-15 12:29:27 · 204 阅读 · 0 评论 -
cf1582 Round #750 Div2-D【构造】
Date:2022.01.14题意:给定序列aaa,要求构造出一个序列bbb使得∑i=1nai⋅bi==0\sum_{i=1}^{n}a_i · b_i==0∑i=1nai⋅bi==0,其中a、ba、ba、b中均不存在0。思路:两两一组,最后如果是奇数则剩三个组成一组,让其中一个等于另外两个的和,另一个等于负的除去两个的另外一个。但是除此之外可能存在一种情况,即两个相加==0,则照常算bbb中会出现0,那我们就找和不为0的两项组为一项,另一项满足定义一定不为0。但是有没有一种情况a、b、ca、b原创 2022-01-15 12:13:58 · 173 阅读 · 0 评论 -
cf1151 Round #553 Div2-D【推公式+思维+贪心】
Date:2022.01.13题意:nnn组数据,定义jjj为当前组号,每组数据对答案贡献满足ai⋅(j−1)+bi⋅(n−j)a_i⋅(j−1)+b_i⋅(n−j)ai⋅(j−1)+bi⋅(n−j),重新排序让所有贡献和最小。思路:式子变形,原式=j⋅(ai−bi)+(bi⋅n−ai)j·(a_i-b_i)+(b_i·n-a_i)j⋅(ai−bi)+(bi⋅n−ai),iii从[1,n][1,n][1,n]累加后,(bi⋅n−ai)(b_i·n-a_i)(bi⋅n−ai)的和固定,而原创 2022-01-13 19:53:27 · 214 阅读 · 0 评论 -
cf1203 Round #579 Div3-D1、D2【贪心+思维】
Date:2022.01.13题意:一个长串n一个短串m,短串所有字符一定能与长串中某些字符相同,找出匹配条件下删除最长片段的长度。思路:最大删除长度一定分为三类。①最左边~满足与m中第一个字符匹配的最大下标。②满足于m中最后一个字符匹配的最小下标~最右边。③在m串中的两个字符的间隙中。此时两个字符间最大删除数量一定在满足删除后能得到串m的的前提下,是 “第一个字符的最左的位置 ~ 第二个字符的最右满足位置”。找这两个位置即分别从前往后双指针,记录与m匹配的第一个位置、从后往前双指针,记录与m原创 2022-01-13 18:21:07 · 142 阅读 · 0 评论 -
cf1461 Round #689 Div2-D【二分查找+前缀和】
Date:2022.01.12题意:长度为n的序列,每次可将当前序列分为两半,规则:mid=(a[max]+a[min])/2mid=(a[max]+a[min])/2mid=(a[max]+a[min])/2,所有<=mid的放到左边一类,>mid的放到右边一边,每次永久舍弃一边。m个询问,问能不能找到和为当前值的,能输出Yes,不能No。思路:求所有可能的和,先处理前缀和。因为每次都最多选<=mid或>mid的一半,因此估算期望大概lognlognlogn层,自然考虑打表。原创 2022-01-13 00:32:24 · 143 阅读 · 0 评论 -
cf1006 Round #498 Div3-E【DFS序】
Date:2022.01.12题意:给定一个n个点的序列,第i个点的父节点是a[i],这样构成一个树。m个询问,问以x为根的子树中dfs顺序从先到后为第y个的点的编号是几;如果y超过以该点为根的子树中结点个数,输出-1。思路:求出这个树的DFS序(也不算DFS序,就是DFS遍历的顺序,分岔路口时注意让序号小的点在前),(DFS序详解见此)标记出每个点的时间戳,直接就能得出每个子树中第y个点的编号是是多少。还有一点比较蛋疼的点,建树用add链式前向星加边是头插,也就是反着的(举个例子:样例中①的所有原创 2022-01-13 00:03:49 · 258 阅读 · 0 评论 -
cf1555 Educational Round 112 Div2-D【思维+构造】
Date:2022.01.10题意:给定一个只包含a、b、ca、b、ca、b、c的字符串长度为nnn,每次操作可将一个字符替换为a、b、ca、b、ca、b、c中任意一个,mmm次询问,求让每一次询问的[l,r][l,r][l,r]中不存在>=2长度的回文串至少需要操作多少次。思路:首先不能存在>=2的回文串,因此每个字符不可能有两个挨着的,再经过模拟我们发现满足条件的串只能是"abcabcabc","acbacbacb","bacbacbac","bcabcabca","cabcabcab原创 2022-01-10 21:40:05 · 312 阅读 · 0 评论 -
cf735 Round #382 Div2-D【哥德巴赫猜想】
Date:2022.01.06题意:n块钱,交的税是n最大的约数,求你让n分若干份后交的总税最少是多少。思路:首先,如果n是质数,不需要分则答案直接为1;否则由哥德巴赫猜想:任何大于2的偶数都是两个素数之和,任意大于7的奇数都是三个素数之和。因此若n不是质数且为偶数,输出2;若n不是质数且为奇数,先判断一个奇数能不能分成两个素数之和,因为奇数=奇数+偶数,若能分出两个素数之和则偶素数只有2,因此判断2和n-2是否都为素数,若为素数则输出2,否则输出3。代码如下:#include <i原创 2022-01-09 13:09:43 · 333 阅读 · 0 评论 -
cf1537 Round #726 Div2-E1、E2【思维+找结论】
Date:2022.01.08题意:给个字符串s,两种操作:①去掉最后一个字符②字符串后接上自身求操作后字典序最小的、长度为k的串。E1:1<=n,k<=50001<=n,k<=50001<=n,k<=5000E2:1<=n,k<=5∗1051<=n,k<=5 * 10^51<=n,k<=5∗105思路①:先看E1,首先能发现一个结论,即:长度为k且字典序最小的串一定是原串的某个前缀(因此此处可能先进行了操作1)进原创 2022-01-08 22:46:10 · 606 阅读 · 0 评论 -
cf1455 Educational Round 99 Div2-D【贪心】
Date:2022.01.08题意:给定一个序列和一个x,每次可选择一个aia_iai>x的位置swap(a[i],x),问最少多少次操作可以让序列变成非降序,或者不可以则输出-1。思路:首先我们考虑到只有a[i]>a[i+1]的情况才会swap(a[i],x),而且交换过程只能从第一个>x的元素~第一个逆序元素全部与对应x交换一遍,因此我们按照这种顺序更新,把所有逆序元素更新完之后看整个序列是不是非降序即可。代码如下:#include <iostream>原创 2022-01-08 15:53:44 · 432 阅读 · 0 评论 -
cf1234 Round #590 Div3-D【二维树状数组】
Date:2021.01.06题意:操作1:将第pos个位置改为字母c操作2:计算[l,r]中字母种类数思路:建26个BIT,编号0-25。设原序列为s,操作1即为在第s[pos]-‘a’个BIT中将第pos个位置-1;再在第c-'a’个BIT中将第pos个位置+1。操作2即为统计26棵BIT上有几个在[l,r]上的和>0。【注意BIT下标从1开始,别忘了初始化。】代码如下:#include <iostream>#include <cstring>#i原创 2022-01-07 17:21:12 · 336 阅读 · 0 评论 -
cf1165 Round #560 Div3-D【欧拉筛+快速幂+约数个数】
Date:2022.01.05题意:给定一串数,这串数包含除了1和x本身外x的所有约数,求能不能得出一个x,或得不出一个x(输出-1)。T=25,n=300,m=10610^6106思路①:首先,x什么时候不存在?题目说明是除了1和x的所有约数,因此个数一定是x的约数个数-2,因此得到x的所有质因子后,即求出x的约数个数即可判断x是否正确,而x的所有质因子一定在其所有约数中,因此可行。其次,x怎么得出?毫无疑问,x是所有数的倍数,因此x一定是所有数的所有质因子的最高次幂的倍数,由此便能原创 2022-01-05 23:09:20 · 410 阅读 · 0 评论 -
cf1165 Round #560 Div3-E【贪心】
Date:2022.01.05题意:给定a、b数组,a数组不能变位置,b可变位置,求变化位置后要求式子的最小和。特别注意不是取模最小的和!!!!!思路:找规律,第i项即为a[i]∗*∗b[i],我们发现第i项要乘i ∗*∗ (n-i+1)次,我们要让总和最小,因此每一项都要尽可能小,因此每一项都是一个大数 ∗*∗ 一个小数。因为a不能动,因此a对答案的贡献是不变的,恒为a[i] ∗*∗ i ∗*∗ (n-i+1)【下标i从1开始】。所以只需要将a[i] ∗*∗ i ∗*∗ (n-i+1)从小到大原创 2022-01-05 22:36:27 · 306 阅读 · 0 评论 -
cf1373 Educational Round 90 Div.2-D【差分+思维】
Date:2022.01.03题意:假设下标从1开始,只能翻转一次某一子序列,求下标为奇数的最大和。思路①:首先显然交换的区间长度为奇数是没有意义的,因此如果交换区间长度只能固定为偶数。模拟一下不难发现翻转本质是让一个区间的值从奇数项和变为偶数项和,因此只需要找到偶数项和 - 奇数项和值最大的那个区间即可,我们先暴力试一下。代码如下:#include <bits/stdc++.h>using namespace std;const int N = 3e5+10;typed原创 2022-01-03 17:05:47 · 360 阅读 · 0 评论 -
cf1294 Round #615 Div.3-D【思维】
Date:2022.01.02题意:MEX是不在数列中最小且非负的整数,给定一个x,每个元素可以+=x或-=x(前提是保证变完仍>=0),另外给定n个数,每次将一个数加到数列尾部,并对元素操作,求每一步操作完之后的MEX,注意要让每一步的MEX尽可能大。思路①:每个元素不论+=x还是-=x,它%x还是不变的,我们不妨将所有元素%x,能%x同余的归为一类(例如%x==0的可以分别赋值为0、x、2*x…),因此我们要找的就是含元素数量最小的那一组,因此我设想用priority_queue+结构原创 2022-01-02 22:23:58 · 213 阅读 · 0 评论 -
cf1363 Round #646 Div.2-C【博弈论】
Date:2022.01.02题意:n个结点,每次选一个度<=1的点连带其一条边消掉,谁拿到点x谁胜利,"Ayush"先手, "Ashish"后手。思路:除非先手第一次就能拿到目标点,否则二者持续给对方制造障碍,使x每次都在最后只剩两个节点时被选,判断节点奇偶即可。代码如下:#include <bits/stdc++.h>using namespace std;const int N = 2e5+10;typedef long long LL;LL t,n,m,k原创 2022-01-02 20:39:50 · 201 阅读 · 0 评论 -
cf1353 Round #642 Div.3-D【构造+pq+重载】
Date:2022.01.02题意:有n个数初始全为0,要求构造满足下列条件的n个数。思路:每次考虑最长的,如果等长先考虑左边的,不妨设一个struct存一下每个区间的左右端点排个序,顺序问题则解决了。之后用priority_queue每次找顺序最靠前的,如果最中间没填过就填最中间的,注意一个区间分叉再入队列至少其分叉前长度>=2,否则区间长度为1分叉会出错。【思路很简单,主要练一下pq怎么用以及重载】代码如下:#include <bits/stdc++.h>using原创 2022-01-02 18:02:31 · 388 阅读 · 0 评论 -
cf761 Round #394 Div.2-C【DP+思维】
Date:2022.01.01题意:n行m列的字符,每行只能选一个,且选完n个后至少分别存在一个数字、小写字母、’*’ || ‘#’ || ‘&’。思路①:n、m<=50,试试能不能爆搜。dfs参数里标记每个元素的数量和总长度,当每个元素的数量和种类都满足条件时记录答案并跳出,然而会t。【注意比较烦人的是有的元素可能倒着走更近,预处理一下就好】代码如下:#include <bits/stdc++.h>using namespace std;const int N原创 2022-01-01 19:02:19 · 365 阅读 · 0 评论 -
cf166 Round #113 Div2-C【构造+二分】
Date:2021.12.31题意:给定一个序列,给定一个数x,求最小添加多少个数使得x为中位数。注意这里的中位数(n+1)/2向下取整的。思路:排个序,先看中位数是否存在。①如果x不存在,加一个x一定最少,再然后判断至少加多少个数它才能到中位数。【这里非常蛋疼,整体判断x到中位数后是偶数项还是奇数项,因此都判断一下取最小值加即可】②如果x存在,二分查找出从左往右第一个出现的x和最后一个出现的x,枚举一下哪个加的最少加上即可。代码如下:#include <bits/stdc++.原创 2021-12-31 21:38:10 · 136 阅读 · 0 评论 -
cf985C Educational Round 44 Div2-C【贪心】
Date:2021.12.31题意:有m=n*k个板子,每个桶需要k个板子构成,且构成的桶体积为k个板子里最短的那个。且给定一个l,桶与桶之间体积差的绝对值不超过l,求构造出的n个桶的总体积最小是多少。思路:开始想了半天不知道怎么贪心,看了题解搞明白了,我们只需要找到n个最短板。首先排序,upper_bound找到最大的最短板(即从左向右>=a[0]+l的最后一个元素的下标x),我们要让n个尽可能小的一堆,因此要从第一个元素每次+k直到>x,这时>x的元素一定不可以作为最短板,因原创 2021-12-31 18:38:01 · 313 阅读 · 0 评论 -
cf990 Educational Round45 Div2-C【构造】
Date:2021.12.31题意:给定n个序列,问有几对序列可以按以下规则匹配,注意算对数时如果(i,j)、(j,i)都满足算两种。思路:首先考虑自身满足的序列,可以和自身结合成一种,也可以和任一满足条件的序列结合为两种,因此每次sum++,再加上 之前满足的*2。其次考虑自身不满足的序列,先给它自身按入栈出栈顺序匹配,匹配完如果两个方向的括弧仍然都存在不匹配的情况,则该序列不能与任何其它序列匹配。因为不论哪个放前面都最多顾及到一个方向的括号匹配,另一方向仍然无法匹配,画个图很好理解。因此原创 2021-12-31 16:59:21 · 293 阅读 · 0 评论 -
cf1616 Good Bye 2021: 2022 is NEAR-C【暴力枚举+精度严格】
Date:2021.12.30题意:将给定长度的数列转化为满足给定式子的,求最小改变次数。思路:不难推出要让给定数列等差,再一看数据范围直接枚举,n^3完全没问题。等差数列要决定公差,而确定两个元素才能确定公差,因此枚举哪两个元素不变,公差既得出。再然后挨个看不满足的有几个,最后记录最小方案。除此之外,坑点是公差不一定是整数,而且判断不满足时不能用两点差值 / 两点距离 与 公差d 比较,会存在精度问题wa7。代码如下:#include <bits/stdc++.h>usi原创 2021-12-30 23:10:13 · 366 阅读 · 0 评论 -
cf1623 Round #763 Div2-C【二分+贪心】
Date:2021.12.28题意:n个元素,第i个元素可以分给第i-1个元素d,分给第i-2个元素2 * d(前提是第i个能分出3 * d),求分配若干次后n个元素中最小值最大是多少。我们先来看下原题:思路:二分答案,如何check?首先,一个元素只会影响它前面的两个元素,因此我们从后往前来想,我们每次二分答案为mid,从最右面的元素开始贪心的减,即保证>=mid的前提下分出最多的给前面两个。如果遍历到任一元素<mid,则说明mid大了应该变小,并且当前mid也不合法。我们还是原创 2021-12-30 21:14:12 · 334 阅读 · 0 评论 -
cf864 Round #436 Div2-D【贪心】
Date:2021.12.30题意:给定n个数,要将其变成①n个数的组合 ②字典序最小,最少几步。思路:我们无非是将出现过>=2次的数变成别的数,而变成的数一定是未在原序列中出现过的,因此与原数只能是>或<关系,因此我们将没出现过的数存起来,用一个优先队列保证最小的在最前面,这样挨个更换完后字典序一定是最小的。但还有个问题,我们找到了当前出现多次的数,如果它 > 优先队列队头元素,那么一定会被换掉;但如果 < 怎么办?那么当前元素就固定位置在这里,并且标记一下这个元素已经用过,接原创 2021-12-30 22:39:35 · 105 阅读 · 0 评论 -
cf1186 Round#571 Div2-D【构造】
Date:2021.12.25题意:一列数每个可向上或向下取整,整数本身只能是它本身,构造出一个和为0的序列。思路:总和为0是死条件,不妨先让每个元素取的跨度尽可能大,即<0的向下取、>0的向上取,之后求出两个分支的和sum1、sum2来比较,注意本来就是整数的标记一下,避免下面操作将本是整数的向下或向上取了整。①如果sum1>sum2,说明总答案<0,因此依次让每个<0的小数元素向下取,每取一次sum1–,题意规定最后一定可以取到0。②如果sum2>sum1,原创 2021-12-25 16:54:47 · 177 阅读 · 0 评论 -
cf1196 Round#575 Div3-D1【思维】
题意:给定一个长度为n的序列,问最少更改几个字母能使序列中存在长度为k的"RGBRGBRGB…"的子序列。思路:分别打出长度为n以’R’、‘G’、'B’开头的序列,以k为一个滑动窗口从左到右滑动,找到最大的匹配长度,如果>=k,则不需要更改,答案为0;否则需要更改k-最大匹配长度个字母即可。代码如下:#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2010;int.原创 2021-12-25 02:48:09 · 233 阅读 · 0 评论 -
cf1133 Round#544 Div3-D【hash】
Date:2021.12.24题意:两个序列a、b,要求填上唯一的d从而构造出一个序列c,满足:cic_ici=d*aia_iai+bib_ibi,使得c序列中0最多,且求c中最多0的个数。思路:首先我们看特殊情况。①aia_iai==0,无论如何cic_ici是固定的,因此要想让cic_ici==0,只能是bib_ibi==0,,因此求出该情况中bib_ibi的个数即为cic_ici==0的个数。②aia_iai!=0但bib_ibi==0,要让cic_ici==0只能是原创 2021-12-25 02:40:02 · 430 阅读 · 0 评论 -
cf1154 Round#552 Div3-D【贪心】
Data:2021.12.24两种电池a、b,a不可充电,b可充电;两种天气0、1,天气为0时若用a则a-1但可给b+1、用b时b-1,天气为1时用哪个都-1,要求最远走多少。思路:无疑贪心,b是可充电的,因此要让b尽可能充电。模拟一下不难发现遇到1且b未满就用a给b+1,否则尽量用b,如果b不能用了再用a,这样最利于b尽可能多的+1,这样获得电的总数是最多的,自然续航最久。代码如下:#include <bits/stdc++.h>using namespace std;type原创 2021-12-25 02:18:36 · 399 阅读 · 0 评论