Omówienie zadania Sygnał / Olimpiada Informatyczna Juniorów

Szczegółowe omówienie zadania Sygnał ze sparingu Olimpiady Informatycznej Juniorów:
https://youtu.be/f0elTQkIyN0?t=154

Link do zadania Sygnał:
https://sio2.mimuw.edu.pl/c/zwo20/p/syg1/
Link do contestu stałego gdzie można wrzucać rozwiązania zadania Klub Księgarza:


Zadanie Sygnał to proste zadanie, które wymusza pamiętanie liczby elementów i używa do tego specjalnej struktury: map.


Zadanie Sygnał pochodzi ze sparingu Olimpiady Informatycznej Juniorów.
To proste zadanie rozgrzewkowe i chcąc startować w Olimpiadzie musisz je zrobić!

Jak się uczyć na podstawie takiego zadania?
https://tiny.pl/7x1gg

——-
Kod C++ programu Sygnał, który jest omówiony w powyższym filmie i który otrzymuje 100%

#include <bits/stdc++.h>
using namespace std;

const int MAX_LICZBA_KANALOW = 5e5 + 7; //5*10^5 + 7 = 500000+7;
int kanaly[MAX_LICZBA_KANALOW];
map<int, long long> ile_razy_wystapil_kanal;

int main() {
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 
 int ile_domow, odlegosc;
 int numer_do_usuniecia;
 long long wynik = 0;

 cin >> ile_domow >> odlegosc;
 
 for(int i=0; i<ile_domow; i++)
    cin >> kanaly[i];

 for(int i=0; i<ile_domow; i++) {
    numer_do_usuniecia = i - odlegosc - 1;
	if(numer_do_usuniecia >= 0)
	   --ile_razy_wystapil_kanal [ kanaly[numer_do_usuniecia] ];

	wynik += ile_razy_wystapil_kanal [ kanaly[i] ];

	++ile_razy_wystapil_kanal [ kanaly[i] ];
 }
 cout << wynik << "\n";

}
Link do pliku z kodem C++ zadania Sygnał 

 

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz