Zliczanie wystąpień w tablicy.

0

Z tym zadaniem jest problem

Chłopcy i dziewczynki ustawili się w szereg, osoba tuż obok osoby. Zastanawiamy się teraz, ilu minimalnie chłopców musi usunąć się z szeregu, aby pod rząd stało dziewczynek, jedna tuż obok drugiej i pomiędzy nimi wszystkimi nie stał żaden chłopiec.

Wejście
Pierwszy wiersz standardowego wejścia zawiera dwie liczby całkowite n,k, oznaczające odpowiednio liczbę osób ustawionych w szeregu oraz liczbę dziewczynek, jakie chcemy, aby stały pod rząd . Kolejny wiersz wejścia zawiera liczb całkowitych {0 lub 1}, oznaczających kolejne osoby ustawione w szeregu: 0 - oznacza dziewczynkę, 1 - chłopca.

Wyjście
Pierwszy i jedyny wiersz standardowego wyjścia powinien zawierać jedną liczbę całkowitą, oznaczającą minimalną liczbę chłopców, którzy powinni usunąć się z szeregu, lub jedno słowo 'NIE', gdy nie da się usunąć chłopców tak, aby k dziewczynek stało pod rząd.

Przykład
Dla danych wejściowych:

8 3
0 1 1 0 1 0 1 0
poprawną odpowiedzią jest:

2

Na razie tyle udało mi się wypocić

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n,k,dz,poczatek,koniec,score;

    cin >> n >> k;
    vector <int> ogol(n);
    for(int i =0;i<n;i++){
        cin >> ogol[i];}

    poczatek = 1;
    koniec = 1;
    score = n + 1;

    if(ogol[0]==0){
        dz=1;}
    else{
        dz=0;}

    while(koniec<n){
        while(dz<k && poczatek<n){
            poczatek ++;
            if(ogol[poczatek]==0){
               dz++;}}
        if(dz==k){
            score=min(score,poczatek-koniec+1);}
        if(ogol[koniec]==0){
            dz=dz-1;}
        koniec++;}
    if(score ==n+1){
        cout << "NIE";}
    else{
        cout << score-k;
    }
    return 0;
}
3

Słyszałeś o takim narzędziu jak debuger?

3

Address Sanitizer znajduje problem:
https://godbolt.org/z/vEsTxM

Moja rada, dziel każdy kod na małe funkcje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1