首页 > 小红的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 展开全文
头像 牛客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 展开全文
头像 垚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-03-13 15:28:25
from collections import defaultdict # 双指针 滑动窗口 哈希 n, k = map(int, input().split()) s = input() left = 0 cur_01 = 0 # 代表当前01子串个数 cache = defaultdict( 展开全文
头像 牛客844411027号
发表于 2025-03-17 10:20:16
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let inputCount = 展开全文
头像 ading007
发表于 2025-05-14 14:54:37
package main import ( "fmt" ) func main() { var n, k int fmt.Scan(&n, &k) cnt0 := 0 cnt1 := 0 l := 0 展开全文

等你来战

查看全部