随笔分类 - 差分/前缀和
摘要:题意:有$n$个数,你可以任意去除某个位置的元素然后得到一个新数组,使得新数组奇数位和偶数的元素相等,现在问你有多少种情况合法. 题解:先求个后缀和,然后遍历,记录奇数和偶数位置的前缀和,删去$i$位置的元素,意味着原来$i$位置之后的奇数和变成了偶数和,偶数和变成了奇数和,将前缀和与差位的后缀和相
阅读全文
摘要:题意:有两个$01$字符串$a$和$b$,每次让$a$和$b$进行与运算,将值贡献给答案,然后将$b$右移一位,直到$b=0$. 题解:因为$a$不变,而$b$每次右移一位,所以我们看$b$中$1$的位置在$a$中所对应的位置,从该位置到最低位,所有为$1$的位置都要算一次十进制的数贡献给答案,那么
阅读全文
摘要:题意:有一排座位,要求每人之间隔$k$个座位坐,$1$代表已做,$0$代表空座,问最多能坐几人. 题解:我们分别从前和从后跑个前缀和,将已经有人坐的周围的位置标记,然后遍历求每一段连续的$0$,对于每一段最多能坐$\lceil len/(k+1) \rceil$,求个和就可. 代码: #includ
阅读全文
摘要:题意:有一长度为$n$的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #include <iostream> #include <cstdio> #include <cstring
阅读全文
摘要:题意:给你一个只含有$0$和$1$的字符串,每次操作可以将$0$改成$1$或$1$改成$0$,问最少操作多少次,使得子序列中不含有$010$和$101$. 题解:仔细想一想不难发现,构造后的字符串要么全是$1$和$0$,要么就是$000....111$和$111...000$,我们对$0$求一个前缀
阅读全文
摘要:题意:给你一个数组a,定义:若a[i]>a[i]&&a[i]>a[i-1],则a[i]为峰值,求长度为k的区间内峰值最多能为多少,并输出这个区间的左端点(区间需要将峰的左边和右边都包括) 题解:记录每个峰值,然后搞一个后缀和,从前往后枚举长度为k的区间,每次维护一下最多的峰值和区间位置即可. tip
阅读全文
摘要:题意:给你一个长度为偶数n的数组,每次可以将一个元素修改为不大于k的值,要求每个a[i]+a[n-i+1]都相等,求最少操作多少次 题解:假设每一对的和都为sum,小的记为mn,大的记为mx; 枚举[2,2*k]的所有数x: 我们对每一对相应的数考虑,有三种情况:改一个数,改两个数,不改 1.改一个
阅读全文

浙公网安备 33010602011771号