首页 > 小红的01子序列构造(easy)
头像 Gooby114514
发表于 2024-12-24 14:16:34
D 小红的01子序列构造(easy) 两种写法,这里都介绍一下: 方法1:双指针 先考虑一个区间内的 子序列如何统计,我们只需要对于每个 ,看它之前有几个 ,就是它的贡献。 例如对于序列 , 都是 ,他们的贡献依次为 ,所以最后的 子序列数为 。 用双指针枚举区间的左右端点,假设当前区间 展开全文
头像 Gnomeshgh112
发表于 2025-03-26 13:44:33
假设最后的结果左边界为i,右边界为j,那么当左边界为i,右边界在j右边时,计算出的结果一定大于等于k,同样的,如果右边界在j左边,结果一定小于等于k。同理,固定j变化i可以得到相似的结论。所以,使用i和j两个位置,先将j一直向右移动,一旦i j超过了k,那么就将i向右移动。直到满足等于k为止,这样就 展开全文
头像 佛系的青年
发表于 2025-03-17 17:57:25
解法参考评论区大佬,虽然用例全能pass,但有个小疑问,l++使num减少,r++使num增大,这样一来一回的过程会不会让num错过k值? #include <iostream> #include <cmath> using namespace std; typedef lo 展开全文
头像 TQ988
发表于 2025-07-08 16:47:30
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int 展开全文
头像 牛客856751393号
发表于 2025-03-07 14:56:24
while True: try: n, k = map(int, input().split()) s = input() cnt0 = cnt1 = 0 # 分别存储当前区间0和1的个数 l = r = 0 展开全文
头像 冯飞宇
发表于 2025-08-31 19:27:07
#include <iostream> using namespace std; void answer(string str, long long int k) { int len = str.length(); int left = 0, right = 0; 展开全文
头像 垚offer多多
发表于 2025-05-23 12:05:36
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = 展开全文
头像 番禺小韭菜
发表于 2025-03-04 17:34:22
#include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { LL n, k; cin >> n >> k; string s; 展开全文
头像 zy还能再战
发表于 2025-03-26 17:04:56
#牛客春招刷题训练营# + 链接首先要理解题意(过于简洁以至于刚开始愣了)01子序列指的就是 "01" 这样两位,那就很显然了计数数组辅助双指针,直接over #include <iostream> using namespace std; using ll = l 展开全文
头像 丨阿伟丨
发表于 2025-09-01 10:31:58
题目链接 小红的01子序列构造(easy) 题目描述 给定一个仅由字符 '0' 和 '1' 组成的字符串 ,长度为 。小红想找到一个闭区间 ,使得在子串 中,恰好存在 个严格等于 "01" 的子序列。 请你输出任意一个满足条件的区间;若不存在,则输出 -1。 解题思路 这个问 展开全文

等你来战

查看全部