Zadanie

Ako každý rok, aj v roku 2022 Národné toaletné centrum zorganizovalo Zraz toaletárov. Pre veľkú popularitu tohto podujatia sa organizátori rozhodli obmedziť vstup verejnosti. Aby však nerozhnevali verných nadšencov Zrazu toaletárov, vymysleli súťaž, ktorá by umožnila tým najbystrejším zúčastniť sa.
Filip, obrovský fanúšik porcelánových trónov, však veľmi bystrý nie je a žiada ťa aby si mu pomohol dostať sa na tohtoročný Zraz toaletárov.

Úloha

IT oddelenie Národného toaletného centra vymyslelo takúto šifru: Dostaneme dve čísla \(n\) a \(k\) a text rozdelený na riadky, obsahujúci iba alfanumerické znaky a medzery. Aby sme Filipa dostali na Zraz toaletárov musíme šifru rozlúštiť. To urobíme následovne: Pre každý z riadkov vypíšeme \(k\)-ty znak riadku, pričom sa medzery nepočítajú ako znak. Môže sa stať, že v riadku bude nedostatočný počet znakov – vtedy vypíšeme prázdny riadok.

Formát vstupu

Na prvom riadku vstupu sú dve medzerou oddelené čísla: \(n\) - počet riadkov textu a \(k\) - index znaku, ktorý nás zaujíma (je šifrou). Ďalej na vstupe nasleduje \(n\) riadkov textu.

Formát výstupu

Na každý z \(n\) riadkov vypíšete buď znak, ktorý je šifrou alebo prázdny riadok.

Hodnotenie

Sú 4 sady vstupov. Pre prvé tri sady platia tieto obmedzenia:

Sada 1 2 3
\(1 \leq n \leq\) \(50\) \(1\,000\) \(10\,000\)
\(1 \leq k \leq\) \(100\) \(500\) \(10\,000\)

Štvrtá sada zahŕňa špeciálne prípady.

Príklad

Input:

2 5
Narodne toaletne centrum
9800 navstevnikov

Output:

n
a

Všimnime si, že číslujeme od nuly, teda \(k\) je naozaj indexom.

Input:

3 2
Ako
sa
mas

Output:

o

s

Druhý riadok nemal dostatočný počet znakov, teda sme vypísali prázdny riadok.

Čo bolo našou úlohou

Našou úlohou bolo prejsť každý riadok vstupu a vypísať z neho \(k\)-te písmeno. Bolo treba ignorovať medzery, a ak bol riadok bez medzier kratší ako naše \(k\), vypísať prázdny riadok.

Ako sme to urobili

Mohli sme zvoliť viacero postupov. Tým najprimitívnejším bolo prechádzať každý znak z riadku, zapamätať si koľko nemedzerových znakov sme už prešli, a keď sa tento počet rovnal \(k\), vypísať aktuálny znak. Ak sme sa dostali na koniec riadku a naše počítadlo bolo menšie ako \(k\), vypíšeme prázdny riadok. Mohli sme taktiež využiť vstavané funkcie na nahradenie znakov medzery v riadku “ničím” a skontrolovať, či je riadok dlhší ako \(k\). Ak áno vypísať jeho \(k\)-ty znak.

Časová zložitosť riešenia je \(O(n \cdot k)\). Pamäťová zložitosť je priamo úmerná dĺžke riadku(\(l\)), teda \(O(l)\).


numberOfLines,k=map(int, input().split())
out = ''
for i in range(numberOfLines):
    data = input()
    data = data.replace(' ', '')
    if len(data)>k: 
        print(data[k])
    else: print()
//
// Created by filip on 5/12/22.
//
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

void kCharacter() {
    string input;
    int numberOfLines = 0;
    int k = 0;
    cin >> numberOfLines >> k;
    getline(cin, input);
    for (int j = 0; j < numberOfLines; j++) {
        getline(cin, input);
        int c = -1;
        for (int i = 0; i < input.length(); ++i) {
            if (input[i] != ' ') {
                c++;
            }
            if (c == k) {
                cout << input[i];
                break;
            }
        }
            cout << endl;
        
    }

}

int main() {
    kCharacter();
}

Diskusia

Tu môžte voľne diskutovať o riešení, deliť sa o svoje kusy kódu a podobne.

Pre pridávanie komentárov sa musíš prihlásiť.