Run-length encoding

Egymás melletti azonos elemekből álló részek meghatározása

A kimenet tartalmazza, hogy hány darab azonos érték van egymás mellett az egyes részekben.

Példa:

bemenet:
    1 1 1 1 2 2 3 1 1 1 2 2 2
kimenet:
        4 db 1
        2 db 2
        1 db 3
        3 db 1
        3 db 2

Ötlet:

   hanyadik_lépés: 1.  2.  3.  4.  5.  6.  7.
   szam:           1   1   1   1   2   2   3
   érték_eddig:    1               2       3
   db_eddig:       1   2   3   4   1   2   1

   hanyadik_lépés: 7.  8.  9.  10. 11. 12. 13.
   szam:           3   1   1   1   2    2   2
   érték_eddig:    3   1           2
   db_eddig:       1   1   2   3   1    2   3

   Kimenet:
     4 db 1
     2 db 2
     1 db 3
     3 db 1
     3 db 2

Implementáció:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int ertek, db;
    int szam;

    bemenet >> szam;
    ertek = szam;
    db = 1;

    while (bemenet >> szam) {
        if (szam == ertek) {
            db++;
        }
        else {
            cout << db << " db. " << ertek << endl;

            ertek = szam;
            db = 1;
        }
    }

    cout << db << " db. " << ertek << endl;

    return 0;
}

HF

Írjuk ki a leghosszabb egymás melletti azonos elemekből álló rész hosszát!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int ertek, db;
    int szam;
    int maximum = 0;

    bemenet >> szam;
    ertek = szam;
    db = 1;

    while (bemenet >> szam) {
        if (szam == ertek) {
            db++;
        }
        else {
            //cout << db << " db. " << ertek << endl;
            if (db > maximum)
                maximum = db;

            ertek = szam;
            db = 1;
        }
    }

    //cout << db << " db. " << ertek << endl;
    if (db > maximum)
        maximum = db;

    cout << maximum << endl;
    return 0;
}

+ pontért:

Írjuk meg a run length encoding-ot fordítva (a dekódolást), pl.

bemenet:
    4 1
    3 2 
    1 3
kimenet:
    1 1 1 1 2 2 2 3
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int db, szam;

    while (bemenet >> db >> szam)
        for (int i = 1; i <= db; i++)
            cout << szam << " ";

    cout << endl;
    return 0;
}

Feladat:

Adott egy sorozat. Adjuk meg, hogy milyen hosszú a leghosszabb páros elemekből álló rész (ill. hol kezdődik és hol végződik)!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int ertek, db = 0;
    int szam;

    int maximum = 0;
    int utolso = -1;

    int hely = 0;

    while (bemenet >> szam) {
        hely++;

        if (szam % 2 == 0) {
            db++;
        }
        else {
            if (db > maximum) {
                maximum = db;
                utolso = hely-1;
            }

            db = 0;
        }
    }

    if (db > maximum) {
        maximum = db;
        utolso = hely;
    }

    cout << maximum << endl;
    cout << utolso - (maximum-1) << " "
         << utolso << endl;
    return 0;
}