牛客网_CSP-J入门组
Ls_attack
这个作者很懒,什么都没留下…
展开
-
牛客-模拟、枚举、贪心 2022.11.18
从样例可以发现,首先可以假设所有的奶牛都为最高值,然后对于每一对给出的奶牛的区间,在这区间之间编号的奶牛需要高度减去一(区间为左开右开)。经过一番操作之后,即可得到所有奶牛可能的最高值。(当然可能重复出现的区间,对于重复出现的区间不需要进行重复操作即可)从高位到低位依次枚举,优先考虑从0变为1,就是说尽可能的让这个数小一点。可以考虑最开始每一位为 0/1,然后到最后是否可以变回 1。贪心排序花和道路所需时间即可。原创 2022-11-18 16:46:12 · 175 阅读 · 1 评论 -
牛客-模拟、枚举与贪心 2022.11.16
分成三类,稳定值增加,不变,减少。考虑从后往前遍历减少的情况,可以发现最后一个要符号条件,需要当前值大于消耗值,而恢复值是不需要看的,因为消耗完就结束了,所以恢复值不是那么重要。看到异或操作其实第一反应就是将数据改写成二进制形式,之后再观察样例的输出结果,可以发现如果当前二进制位零的个数超过了数据个数的一半,就讲结果这一位二进制写为零,否则写为一(因为需要多组可行解的情况下,数值尽可能小)(零的个数正好为一半时可以为零,也可以为一,但是为了数值尽可能小,所以选择为零)但是直接遍历只能过60%,还需要优化。原创 2022-11-16 22:07:17 · 346 阅读 · 0 评论 -
牛客-模拟、枚举、贪心 2022.11.15
之后对于每个名字的查询,从名字的第一个字母出现的第一个位置开始,二分查找之后每个字母的位置是否大于当前的位置,如果大于,更新当前位置,直至名字数组结束,说明存在子序列,否则不存在。如果二者最高位相同,则比较下一位,直到出现不同的二进制位置,那么从这一位置开始往后到二进制的最低位,存在全为一的最大值,之前的高位置都相同,异或结果为0。对于药剂的数值,按照从大到小排序,对于奶牛的区间,按照区间最小值从大到小排序,之后遍历奶牛,对于每头奶牛,遍历药剂看是否存在符合条件的药剂,记录结果即可。模拟遍历01串即可。原创 2022-11-15 23:30:20 · 242 阅读 · 0 评论 -
牛客-模拟、枚举、贪心 2022.11.14
第一个点无雷,第二个点有雷;这里由于已经假设了第一个点和第二个点的数值(有雷为1,无雷为0),那么可以根据第二列的第二个值推导出第一行第三个点的情况,第四个点同理,......最后还需要进行验证,那么只需要将最后两个值和第二列的最后一个数值进行判定是否相等,如果相等说明这种放置地雷的情况是一种结果,否则不是。查看题解后,思路无误,只是可以在每次移动的时候也进行礼物类型的记录,即构建一个结构体,存储所有的礼物种类和位置,对于结构体按照位置从小到大排序,之后遍历结构体,记录当前的礼物种类类型。原创 2022-11-14 16:15:44 · 168 阅读 · 0 评论 -
牛客-模拟、枚举、贪心 2022.11.12
第一遍写的思路是:统计连续的1和0的个数,1的个数为正数记录,0的个数为负数记录,之后遍历连续数组每个位置,以当前位置为起点,寻找最后的端点。但是总是超时,于是考虑能否二分,但是二分其实判定的函数时间复杂度也是O(n).之后再想,其实不需要做一个连续化,直接在原本数组上进行滑动窗口操作,即可判定。对数组数据按照从小打大排序,前缀和记录相邻数据之间的差值,经过k次操作如果需要相同数据出现的次数最多,那么肯定是变化为数组中已经存在的数字,以当前数组位置作为左端点,二分求解右端点的位置。原创 2022-11-12 23:17:46 · 132 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.11.11
二维前缀和,如果k*k区域的前缀和为0,说明当前区域一个建筑都没有,不会影响,否则会影响。记录所有有货物xu qi。原创 2022-11-11 17:32:24 · 122 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.11.02
枚举每个点,之后记录以这个点为末尾的所有区间的异或和,然后枚举所有以这个点为起点的区间的值,当存在二者数值相等时,说明异或和为零,此时结果数目+1即可。首先可利用前缀和求取区间的异或和,然后,我就写了一个四重循环然后TLE了。一年前不会写这道题,一年后还是不会,属于是属于是了。原创 2022-11-02 22:31:29 · 151 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.31
当我们希望对原数组的某一个区间[l,r]施加一个增量inc时,差分数组d对应的变化是:d[l]增加inc,d[r+1]减少inc,并且这种操作是可以叠加的。这道题目中,每次增量的数目为1。之后对于每个位置的不同货物的种数,进行一个前缀和,即可得到每个位置的不同货物的数目。当我们需要对原数组的不同区间施加不同的增量,我们只要按规则修改差分数组即可。(新学了差分数组这一数据结构,初次接触,之后好好复习)原创 2022-10-31 19:40:12 · 182 阅读 · 0 评论 -
牛客-模拟、枚举、贪心 2022.10.27
【代码】牛客-模拟、枚举、贪心 2022.10.27。原创 2022-10-27 20:58:39 · 188 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.25
根据这个关注点可以知道,这里我们不用从后先前逐个进行四舍五入。a.i-1位的值为9,那么将该位置置0,向前进1;如果首位为9加1那么先输出一个1在输出数字。1、若i 的值是四,那么可以继续五入并继续检查i-1是否为4,如果为4那么继续进行五入。2、i的值为小数点,那么将此位置为结束位。同时查看i-1位即小数点前一位的值。先mark,还在求解中,感觉这周可能都调试不出,提高组水平的题。b.i-1的值不为9,该位加1.让他的成绩可以在小数点后的。原创 2022-10-25 21:55:25 · 129 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.24
直接贪心,直接算出平均的水温,再分类讨论一下即可。假如平均的水温比n个杯子里的都小,那么肯定大水缸是降温的.假如平均的水温比最大的要大,说明大水缸是升温的,不然我的大水缸的温度夹在max和min中间,那么一定是不能调节的。记录每行,每列可以分隔的同桌人数,然后按照行号,列号从小到大的顺序输出前k行,前l列最大的数值即可。如果是正数,直接将其放到到第一个进行删除是最优的,如果是负数,将其在当前位置删除则是最优的。原创 2022-10-24 11:47:53 · 123 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.23
先对数组按照从小打到排序,第一次,先让第一个数和第二个数大小相等,即相加的n-1个数只除了第二个数字,第二次,让第一第二个数和第三个数大小相等,即相加的n-1个数只除了第三个数字,之后每次相加同理,相加n-1次,即可得到答案,最后的结果就是最大的数字加上每次两个数字的差值,做一个前缀和相加。简单模拟输出,一眼可知,凳子消除最贵的商品,所以比较凳子和购物车两者的最小值,即可以得到最终的结果。一开始的想法是从前往后相加相同的数字,然后删除,但是会导致之后的数字也相同,导致并不是最少的次数。原创 2022-10-23 16:23:00 · 353 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.22
由于全是小写字符串,使用一个数组,记录每个字母存在的最后一个位置。从最大字母开始遍历到最小字符,这一过程中遍历原字符串,输出其中的当前最大字符,即可得到最终的结果。昨天写的题目较为简单,和今天写的一起做一个总结。构建哈夫曼树,哈夫曼编码。原创 2022-10-22 20:50:36 · 138 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.20
可以看到,当将第一行的答案放在第一列的时候,剩下的就是求的答题卡规模为(n - 1) * (n - 1) 的所有方案,当第一行的答案放在第二列的时候,剩下的就是求答题卡规模为(n - 2) * (n - 2) 的所有方案(因为此时根据答案横竖相同要求的对称性,确定了一行的同时也就确定了一列,所以此时有两行和两列都不能进行选择),同理将第一行的答案放在第三列也是一样的。所以横答题卡某一行的答案确定之后,对应的竖答题卡的某一列的答案也就确定了,并且交于这两个答案的行和列也已经确定了。在棋盘规模为 的情况下,原创 2022-10-20 14:56:02 · 232 阅读 · 0 评论 -
牛客-模拟、枚举与贪心 2022.10.19
递推 用res[i]表示iloveyou匹配了前i个的字符的子序列数,当遇到第i个字符,则之前匹配了前i-1个的字符的子序列都可以变为匹配了前i个的字符的子序列,即res[i]=res[i]+res[i-1]递推+高精度(所以python)原创 2022-10-19 19:44:24 · 451 阅读 · 0 评论 -
牛客-模拟、枚举与贪心-2022.10.18
输出第一个最小的非零的数字,如果存在零,只输出一个,然后输出零个数的一半,之后继续从小到大输出即可。昨天和今天写的题都比较简单,本来都不想挂,但是还是觉得浅浅记录一下。原创 2022-10-18 21:55:00 · 153 阅读 · 0 评论 -
牛客-栈、队列和stl 2022.10.16
统计最长的,连续的红色球数目。给定的数据是每个红色球和蓝色球和位置,其中一个位置上可以有多个红色球或者蓝色球。利用map能够自动排序的特性,进行遍历,统计当前区间内红色球的数目,当遇到蓝色球时,直接清零即可。原创 2022-10-16 23:24:28 · 142 阅读 · 0 评论 -
牛客-栈、队列和stl-2022.10.14
用数组模拟队列,用unordered_map记录每个名字的同学的位置,之后判断当前队列的第一个名字和出队的人的名字是否相同,如果相同则将头指针下标移动到下一个,符合排队规则的人数+1,否则更新当前位置之后的所有人的名字的位置(更新unordered_map)先记录小于最大数值的所有的质数,然后对于这些质数进行2次方,3次方,4次方求和的三重循环遍历,考虑到最大的质数数据范围小于一万,数据范围为10^3,所以直接遍历记录相加求和的结果即可。原创 2022-10-14 11:00:22 · 154 阅读 · 0 评论 -
【无标题】
利用栈的特点,每次对于'o'进行合并后重新入栈,对于'O'进行消除出栈。最后逆序记录栈中元素即可。简单的栈的性质的应用。原创 2022-10-13 22:10:18 · 120 阅读 · 0 评论 -
牛客-栈、队列和stl 2022.10.12
一开始的想法是寻找从n开始到1的序列,但是只能过7.51%,题解区的做法是:贪心思想,记录一个后缀的最大值数组,每次将数组元素入栈,然后比较栈顶元素和当前最大值,如果栈顶元素大于当前最大值,则出栈,直到小于为止。(还是没想明白为何一开始做法不对,明后几天继续想想)昨天面试和笔试有点多,没时间刷了,写了两道水题感觉没必要记录,所以没有写。今天面了两家,笔了三家,抽空写了这么一道可以记录的题。原创 2022-10-12 22:31:25 · 290 阅读 · 0 评论 -
牛客-函数与递归 2022.10.10
其实就是简单的根据字符串序列,每次使用前半段构建左子树,后半段构建右子树,当前字符串判定是I,B,F串然后按照后序遍历的顺序输出。每次截取可以使用开始下标和结束下标进行标记,在这个范围内判断字符串输出什么即可。原创 2022-10-10 11:16:47 · 272 阅读 · 0 评论 -
牛客-函数与递归 2022.10.9
看见%2可反应和奇偶有关,再看/2反应应该和二进制有关,第一个出现的数,经过列举几个数字后,发现只要二进制位上一的个数相等,结果就相等,那么第一个数就是全一的二进制数表示的十进制数大小。根据向量计算叉积还是乘积,具体我也没搞明白,只知道就是这么一个固定写法。原创 2022-10-09 22:03:54 · 95 阅读 · 0 评论 -
牛客-数组、字符串及数据批量存储 2022.10.8
将方程式分为左边和右边两个部分,分别计算记录左右两边各自的符号数值和与常数数值和。再对结果为零的两种情况分别进行特判,最后按照要求输出结果即可。其他情况都是参差不齐。原创 2022-10-08 16:22:50 · 120 阅读 · 0 评论 -
牛客-数组、字符串及数据批量存储 2022.10.7
可以在纸上模拟一下,当两个蚂蚁碰撞后,两个蚂蚁调转方向,但是可以看作是两个蚂蚁没有调转方向,而是进行了一次互换,这样只需要记录所有蚂蚁的位置,然后求取一个离两端出口都距离最远的一个蚂蚁距离即可。昨日刷的题目较为简单,没有需要做笔记记录的,所以没有进行记录。今日的题目也很简单,都是暴力能过,不过记录一下之后数据量大的做法。求逆序数最常规的做法就是一个个遍历,其次就是根据归并排序的思想求取。这里记录一下使用归并排序的做法。原创 2022-10-07 22:36:14 · 151 阅读 · 0 评论 -
牛客-语法入门-循环结构程序设计 2022.10.5
负数进制转换规则:如果余数mod为负数,余数mod减去除数base进制基数,之后数字n减去余数mod再除以进制基数base,循环往复即可。记录上下限求取差值,还需要前缀和进行差值累加。原创 2022-10-05 17:01:19 · 198 阅读 · 0 评论 -
牛客-语法入门-顺序结构程序设计 2022.10.4
赛瓦维斯特定理:a,b > 1 gcd(a, b) == 1 使得ax + by = c的最大无整数解C的取值为 a * b - a - b。数学题,比较繁琐的是误差和精度。原创 2022-10-04 23:44:41 · 185 阅读 · 0 评论 -
牛客算法竞赛入门课第一节习题 2022.10.3
01串,即通过二进制位表示当前要选择的行或者列的状态。这样可以等价于进行深度优先搜索的返回结果,但是相较于深度优先搜索写法更加简单,同时对于状态记录更加容易去除一些重复记录的值。对于行或者列,先进行行选取,选择某些行的权值求和,之后再对列进行选取,记录相应的状态并求和。之后对于求和记录最大值。每次对数组中的数据进行操作后,之后都要记得恢复。原创 2022-10-03 20:11:04 · 1028 阅读 · 0 评论 -
牛客算法竞赛入门课第一节习题 2020.10.2
由于坐标的范围是固定的,所以可以根据固定的坐标范围进行二维前缀和求取在边长R的范围内,能够取到的价值最大值。贪心思想,按照结尾排序,每趟记录开始点和结束点,每趟将已切分开的序列进行标记。在序列的头和尾结点切分不能算切分,不能算。贪心思想,按照结束时间排序,然后统计个数即可。原创 2022-10-02 14:45:27 · 201 阅读 · 0 评论 -
牛客算法竞赛入门课第一节习题 2022.10.1
先求取一个前缀和数组,通过前缀和数组求取各个k个数序列的大小。之后先从前往后更新记录k个数序列的最大值,再从后往前更新记录k个数序列的最小值,最后从前往后或者从后往前遍历一次所有序列,对每次能取到的最大值求和,更新,得到最后的结果。通过每次对当前数值n的大小进行更新,从而能够逐步缩小范围从而规避第三种情况。对输入数字进行分解质因数。原创 2022-10-01 17:58:10 · 205 阅读 · 0 评论