日常训练
gov-T
这个作者很懒,什么都没留下…
展开
-
F- Kobolds and Catacombs
题意:给定一个数组,可以对任意一个连续子段非递减排序,问最多可以排几次,使原序列非递减例:1 2 3 5 4 ,则最多排序次数的方式为:[1] [2] [3] [5 4]算法:思维题解:比较排序之后的数组b和原数组a可知,当某个位置在a和b中的前缀和相等的时候,就是一个有效区间。代码:时间复杂度:O(n)#include <algorithm>#include <iostream>#include <stdio.h>#include <..原创 2021-10-10 10:33:42 · 320 阅读 · 1 评论 -
CF-978 D. Almost Arithmetic Progression
题意:给定一个长度为n的数组,数组的每个元素可以进行+1或者-1操作。如果可以通过这两个操作,使数组变为等差数列,输出需要的最少操作。否则输出-1。算法:枚举题解:数组的第一个元素和第二个都有3种取值,枚举这9种排列。在每种情况下,算出公差d,则符合题意的数组就唯一确定了,把合法数组和原来的数组逐位比较,如果存在差的绝对值大于1,则说明这个合法数组是无法通过原数组得到的。否则当差的绝对值不为0的时候,cnt++。所有情况中最小的cnt即为答案。代码:时间复杂度O(n)#include &l原创 2021-09-30 15:29:09 · 128 阅读 · 0 评论 -
CF-976 C. Nested Segments
题意:给定几组区间 [l,r],让你找到一对区间为包含关系,若有多组随意输出一组,若无则输出-1, -1算法:排序题解:使用结构体储存左边界l,右边界r,序号idx。按照 l递增,r递减的顺序排序。分析可知只要前面的r比后面的大,则前面的区间一定包含后面的区间,使用结构体 t存储遍历过的 r最大的区间。代码:时间复杂度O(n)#include <algorithm>#include <iostream>#include <stdio.h>#inc.原创 2021-09-30 15:12:49 · 180 阅读 · 0 评论 -
CF-998 C. Convert to Ones
题意:给定一个字符串。定义以下两种操作:(1)翻转一个字串,例如 1101 -> 1011,花费x(2)改变一个字串的值,例如 1101-> 0010,花费y求解将字符串每个元素都变为1的最小花费。算法:思维题解:有两种方法得到全为1的字符串。一:将连续的1通过1操作放到左右两侧,中间只剩下连续的0,再使用一次2操作将0变为1。所以总花费是 (所有连续的1的个数-本来就在两侧的连续的1的个数)*x+y,即cnt1*x+y。二:直接对所有连续的0的字串使用2操...原创 2021-09-28 11:44:06 · 68 阅读 · 0 评论 -
CF - 1000B. Light It Up
题意:在0时刻,灯的状态是打开,然后在每个a[i]处灯的开关状态反转一次,在m时刻灯的状态是关闭。要求是:在a数组中插入一个[0,m]中的数或者不插入,计算所有情况中最大的灯亮总时间算法:前缀和 、思维题解:在a[i]和a[i+1]之间插入一个数x时,a[i]前面的灯亮的时间和是不变的,x后面每个a数组的元素代表的状态反转一次,反转后a[i+1]之后灯亮的时间是固定的(不因为x的大小改变)。所以主要看a[i]和a[i+1]之间的状态。这时分为两种情况:(1)a[i]代表开,a[i+1]代表关原创 2021-09-28 10:53:13 · 107 阅读 · 0 评论