それならゼロから、いや、ゼロから始めましょう

简介: それならゼロから、いや、ゼロから始めましょう

それならゼロから、いや、ゼロから始めましょう - NYOJ


思路:

       遍历:结局是一的就加到cnt中

       随后双指针枚举,快指针指向的元素是0则加到cnt,指针间距超过k,若慢指针所指的元素是


       0,则cnt减去这个元素,每一轮操作完要res= max;

       最后输出res+已经是1的结局契合值


流程:根据题目关键词连续区间来确定用的算法是双指针,考虑双指针的指针移动情况,写出特殊的条件,与数据维护的语句


套路:


1.用双指针滑动窗口就好了,(关键词:连续区间,序列)

此题右指针一直在移动,左指针满足某条件后移动

1. for(int i = 1,j = 1;i <= n;i++){
2. if(...)j++;
3. }

也有不满足某条件时,右指针移动,满足某条件时左指针移动

1. for(int i = 1,j = 1;i <= m;i++){
2. while(...)j++;
3. }

2.容易与双指针滑动窗口扯上关系的最值问题,在双指针前声明返回值res,有时还需要储存每一轮数据的cnt、ans,在数据变动后与res进行比较

#include <iostream>
using namespace std;
const int N = 1e7;
typedef long long ll;
int st[N],num[N];
int main(){
  int n,k;
  cin >> n >> k;
  for(int i = 0;i < n;i++){
    cin >> num[i];
  }
  for(int i = 0;i < n;i++){
    cin >> st[i];
  }
  int res = 0;
  for(int i = 0;i < n;i++){
    if(st[i] == true) res += num[i];
  }
//    cout << "res = " << res;
  int sum = 0,maxn = 0;
  for(int i = 0,j = 0;i < n;i++){
    if(st[i] == false) sum += num[i];
//        cout << "sum = " << sum <<" ";
    if(i - j + 1 > k){
      if(st[j] == false) sum -= num[j];
      j++;
    }
//        cout << "sum = " << sum <<" ";
    maxn = max(sum,maxn);
//        cout << "maxn = " << maxn << " ";
  }
  cout << maxn + res;
  return 0;
}

********************************

题解代码

或者是用i-k来代替慢指针

只需操控一个指针,比较方便

此题是i > k + 1 后,j始终会随着i移动,且差值始终为k,所以根本不需要双指针

双指针是i,j会根据情况来改变移动情况时用的

#include<iostream>
using namespace std;
const int N = 1e6;
int main(){
    bool st[N];
    int a[N];
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i = 1;i <= n;i++){
    cin >> a[i];
    }
    for(int i = 1;i <= n;i++){
        scanf("%d",&st[i]);
    }
    int res= 0,maxn = 0,sum = 0;
    for(int i = 1;i <= n;i++){
    if(st[i] == true) sum+=a[i];
        else maxn += a[i];
        if(i >= k + 1){
            if(st[i-k] == false) {
                maxn -= a[i-k];
            }
        }
        res = max(maxn,res);
    }
  printf("%d",res+sum);
    return 0;
}
目录
相关文章
|
3月前
【刷题记录】尼科彻斯定理、数对、环形结构
【刷题记录】尼科彻斯定理、数对、环形结构
|
6月前
|
机器学习/深度学习 Java Python
代码解密 | 2024春晚刘谦魔术与约瑟夫环问题
2024春节联欢晚会中,刘谦老师的魔术节目可以说是我心目中的全场最佳~春晚刚结束网上就有大佬给出了第二个魔术(拼扑克牌)的数学模拟,也有大佬发布了代码程序。博主在模拟了魔术过程之后,也在此分享一下程序代码和思路。同时,也借此回顾一下经典的数学问题:约瑟夫环问题。
108 8
|
6月前
DongDong认亲戚 - 并查集
DongDong认亲戚 - 并查集
20 0
|
6月前
35.鸡兔同笼问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
35.鸡兔同笼问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
49 0
|
传感器
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
|
算法
回溯算法——我欲修仙(功法篇)
回溯算法——我欲修仙(功法篇)
104 0
用试题这把“剑“帮你破除指针与数组之间的那些猫腻
用试题这把“剑“帮你破除指针与数组之间的那些猫腻
63 0
【每日一道智力题】之如何最快的找到最轻的砝码
【每日一道智力题】之如何最快的找到最轻的砝码
208 0
【每日一道智力题】之蚂蚁走树脂和绳子秒表
【每日一道智力题】之蚂蚁走树脂和绳子秒表
170 0
|
机器学习/深度学习 C语言 决策智能
【每日一道智力题】之 轮流取石子(尼姆博弈的详解)
【每日一道智力题】之 轮流取石子(尼姆博弈的详解)
470 0