Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Długość uporządkowanego podzbioru

Ostatnio zmodyfikowano 2015-10-19 18:54
Autor Wiadomość
midaged
Temat założony przez niniejszego użytkownika
Długość uporządkowanego podzbioru
» 2015-10-18 21:22:06
Mam takie zadanie:
Tablica
Limit pamięci: 64 MB
Kacper i Adi bardzo polubili system dwójkowy. Każdy z nich napisał na tablicy ciąg zer i jedynek. Kacper chciałby teraz w każdym z tych ciągów skreślić niektóre cyfry tak, żeby pozostałe ciągi były takie same oraz były uporządkowane, tj. po pierwszym wystąpieniu jedynki nie może już wystąpić żadne zero. Jaki najdłuższy ciąg może pozostać na tablicy?

Wejście
Pierwszy wiersz wejścia zawiera dwie liczby całkowite  (), oznaczające długość ciągów napisanych przez kolejno Kacpra i Adiego. W drugim wierszu znajduje się  cyfr 0 lub 1 - liczba napisana przez Kacpra. W trzecim wierszu znajduje się  cyfr 0 lub 1 - liczba na wyświetlaczu Adiego.

Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać jedną liczbę - długość najdłuższego ciągu który może pozostać na tablicy.
Moje rozwiązanie:
C/C++
#include <cstdio>

int main()
{ int lz1 = 0, lz2 = 0, n, m;
    scanf( "%d %d\n", & n, & m );
    int w1[ n ], w2[ m ], mz1[ n + 1 ], mz2[ m + 1 ];
    mz1[ 0 ] = - 1;
    mz2[ 0 ] = - 1;
    for( int i = 0; i < n; i++ )
    { scanf( "%d", & w1[ i ] );
        if( w1[ i ] = 0 )
        { lz1++;
            mz1[ lz1 ] = i; } }
    scanf( "\n" );
    for( int j = 0; j < m; j++ )
    { scanf( "%d", & w2[ j ] );
        if( w2[ j ] = 0 )
        { lz2++;
            mz2[ lz2 ] = j; } }
    int lz, lj1 = 0, lj2 = 0, lj, wynik;
    if( lz1 > lz2 )
         lz = lz2;
    else
         lz = lz1;
   
    for( int t = 0; t <= lz; t++ )
    {
        for( int c = mz1[ t ] + 1; c < n; c++ )
        { if( w1[ c ] = 1 )
            lj1++; }
        for( int d = mz2[ t ] + 1; d < m; d++ )
        { if( w2[ d ] = 1 )
            lj2++; }
        if( lj1 > lj2 )
             lj = lj2;
        else
             lj = lj1;
       
        if( t = 0 )
             wynik = lj;
        else
        if( t + lj > wynik )
             wynik = t + lj;
       
        lj1 = 0;
        lj2 = 0;
        lj = 0;
    }
   
   
    printf( "%d", wynik ) );
    return 0;
}

Niestety wyświetla mi jakiś dziwny ok. 9-cyfrowy wynik, zawsze taki sam. Ktoś pomoże?
P-138835
pekfos
» 2015-10-18 22:01:05
C/C++
if( t = 0 )
     wynik = lj;
else
if( t + lj > wynik )
     wynik = t + lj;

wynik jest niezainicjalizowane, a ten kod to jedyny moment, w którym może dostać wartość. Pierwszy warunek jest zawsze fałszywy, a drugi działa jak mu się podoba, bo wartość wynik jest nieokreślona.
P-138840
C-Objective
» 2015-10-19 16:10:47
Wreszcie ktoś kto używa
stdio.h
P-138881
midaged
Temat założony przez niniejszego użytkownika
» 2015-10-19 18:52:06
Trochę nie rozumiem. Przecież w pierwszej pętli t=0, więc czemu if (t=0) będzie zawsze fałszywe?
P-138897
carlosmay
» 2015-10-19 18:54:51
Bo przypisujesz do 't' wartość 0; A (0 == false);
P-138899
« 1 »
  Strona 1 z 1