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)\).
=map(int, input().split())
numberOfLines,k= ''
out for i in range(numberOfLines):
= input()
data = data.replace(' ', '')
data 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ť.