Szczegółowe omówienie zadania Books:
Link do powyższego omówienia zadania Books: https://youtu.be/JggX75UKThc?t=1086
Omówienie kodu zadania Books: https://youtu.be/JggX75UKThc?t=3210
Link do treści zadania Books: https://codeforces.com/contest/279/problem/B
Zadanie Books to zadanie ćwiczeniowe na algorytm gąsienicy:
- Wyjaśnienie algorytmu gąsienicy: https://youtu.be/JggX75UKThc?t=1830
- Wizualizacja gąsienicy: https://youtu.be/JggX75UKThc?t=1000
- Złożoność gąsienicy: https://youtu.be/JggX75UKThc?t=2990
Zadanie Books pochodzi z najpopularniejszej platformy programistycznej – Codeforces: https://youtu.be/Fe1SjCbc5iA?t=13
Pozwala stworzyć fantastyczne CV! https://youtu.be/Fe1SjCbc5iA?t=6439Zadanie
–
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
Lista zadań z rozwiązaniami: https://oki.org.pl/lista-zadan-materialy.php
Samouczek – przygotowanie do Olimpiad: https://oki.org.pl/tutorial/
Zajęcia: : https://oki.org.pl/harmonogram-zajec/
Warto startować w Olimpiadzie Informatycznej!
https://youtu.be/K7fZfJ8nN6A?t=109
–
Kod C++ programu Books, który jest omówiony w powyższym filmie i który otrzymuje 100%
–
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100*1000 + 7;
// ksiazka[i] = czas czytania ksiazki i
int ksiazka[MAXN];
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0);
int n, maxCzas;
cin >> n >> maxCzas;
for (int i = 1; i <= n; ++i)
cin >> ksiazka[i];
int lewo = 0; // element przed poczatkiem przedzialu (ogon)
int prawo = 0; // element bedacy koncem przedzialu (glowa)
int aktCzas = 0;
int wynik = 0;
while (lewo < n) {
while (prawo < n && aktCzas <= maxCzas) {
++prawo;
aktCzas += ksiazka[prawo];
if (aktCzas <= maxCzas)
wynik = max(prawo - lewo, wynik);
}
++lewo;
aktCzas -= ksiazka[lewo];
}
cout << wynik << '\n';
return 0;
}
Kod C++ programu Books, który jest omówiony w powyższym filmie i który otrzymuje 100%
–
Kod Python programu Books, który otrzymuje 100%:
n, maxCzas = map(int, input().split()) ksiazka = list(map(int, input().split())) lewo = -1 # element przed poczatkiem przedzialu (ogon) prawo = -1 # element bedacy koncem przedzialu (glowa) aktCzas = 0 wynik = 0 while (lewo < n-1): while (prawo < n-1 and aktCzas <= maxCzas): prawo = prawo + 1 aktCzas += ksiazka[prawo] if (aktCzas <= maxCzas): wynik = max(prawo - lewo, wynik) lewo = lewo + 1 aktCzas -= ksiazka[lewo] print(wynik)