Długość uporządkowanego podzbioru
Ostatnio zmodyfikowano 2015-10-19 18:54
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: #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? |
|
pekfos |
» 2015-10-18 22:01:05 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. |
|
C-Objective |
» 2015-10-19 16:10:47 Wreszcie ktoś kto używa stdio.h |
|
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? |
|
carlosmay |
» 2015-10-19 18:54:51 Bo przypisujesz do 't' wartość 0; A (0 == false); |
|
« 1 » |