zadanie ze spoja - flamaster

zadanie ze spoja - flamaster
L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Mam problem z tym oto zadaniem : http://pl.spoj.com/problems/FLAMASTE/
Napisałem kod i według mnie działa dobrze, ale sprawdzarka na SPOJ wywala błędną odpowiedź.
Przepraszam za bałagan w kodzie, jestem początkującym, proszę o sprawdzenie gdzie jest błąd i ew jakieś sugestie co poprawić lub jak sie wgl zabrać do tego zadania, z góry dzięki:
Oto kod:

Kopiuj
#include <iostream>
#include <cstring>
int main()
{
    using namespace std;

    int n;
    cin >> n;
    int ile = 1;
    char wyraz[200];

    for (int j = 0; j < n; j++) {
        cin >> wyraz;
        for (int i = 0; i < strlen(wyraz); i++) {
            if (ile <= 2)
                cout << wyraz[i];
            else if (ile >= 3) {
                cout << ile;
                i += ile - 1;
                cout << wyraz[i];
            }
            ile = 1;
            for (int z = i + 1; wyraz[z] == wyraz[i]; z++)
                ile++;
        }
        cout << endl;
    }

    return 0;
}
vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
2

Masz skopaną logikę, widać to w pierwszym kroku wewnętrznej pętli - od razu sprawdzasz ilość wystąpień czegoś co jeszcze nie zliczałeś.
Poza tym nie resetujesz liczby wystąpień pomiędzy "słowami".

Przykładowe dane we które to pokazują:

Kopiuj
2
OOOPSSS
AAAABBBB

Wynik:

Kopiuj
O3PS3
41

http://ideone.com/W6Po5K

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
1

OK, lepszy zbiór wejściowy:

Kopiuj
2
AAABBB
BBBACC

Przy tym zbiorze na konsoli niby wszystko jest OK, ale na końcu pierwszej linijki do pliku generowane jest '\0' co może przekłamywać wynik testu.

Kopiuj
41 33 42 33 00 0a 42 33 41 43 43 0a

Błędu nie widać na ekranie.

Edit: przy pierwszym zbiorze ten błąd też widać.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.