Books – Omówienie zadania (Codeforces)

Books – Omówienie zadania (Codeforces)

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:

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)

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz