Szczegółowe omówienie zadania Naklejki:
Link do powyższego omówienia zadania Naklejki:
https://youtu.be/OC_xrHSMYlA?t=6468
https://youtu.be/OC_xrHSMYlA?t=6468
Link do treści zadania Naklejki:
https://szkopul.edu.pl/problemset/problem/naklejki/site
https://szkopul.edu.pl/problemset/problem/naklejki/site
——
Zadanie Naklejki wymaga pomysłu – nie potrzeba żadnej zaawansowanej algorytmiki.
Realizuje strategię na później – najpierw zaznaczamy co mamy zrobić dla każdej ze 100 000 operacji – a następnie przechodząc raz po zadanym napisie wykonujemy od razu wszystkie operacje.
Zadanie Naklejki pochodzi z finału Olimpiady Informatycznej Gimnazjalistów, poprzednika Olimpiady Informatycznej Juniorów.
——–
Jak się uczyć na podstawie tego zadania?
https://youtu.be/QgLyXYmFQeU?t=2019
Pamiętaj by zajrzeć max 1 raz – wtedy się rozwijasz:
https://youtu.be/pkLXuuOe_qA?t=3625
——-
Kod C++ programu Naklejki, który jest omówiony w powyższym filmie i który otrzymuje 100%
–
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 +10;
int numer_operacji[MAXN];
int przesuniecie[MAXN];
string slowo;
int main() {
int liczba_naklejek, liczba_zamian;
int poczatek, koniec;
int delta, ktora_operacja;
int i;
cin >> liczba_naklejek >> liczba_zamian;
cin >> slowo;
for (i=1; i<=liczba_zamian; ++i) {
cin >> poczatek >> koniec;
--poczatek;
--koniec;
numer_operacji[koniec] = i;
przesuniecie[koniec] = koniec - poczatek;
}
delta = 0;
ktora_operacja = 0;
for (i=0; i<liczba_naklejek; ++i) {
if (ktora_operacja < numer_operacji[i]) {
delta = przesuniecie[i];
ktora_operacja = numer_operacji[i];
}
slowo[i] = slowo[i-delta];
}
cout << slowo;
return 0;
}
Link do pliku ze wzorcowym kodem C++ zadania Naklejki