• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie podciągi arytmetyczne - obóz naukowy ilocamp

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
472 wizyt
pytanie zadane 20 lutego 2023 w Algorytmy przez pasjonat_algorytmiki Pasjonat (19,540 p.)

Mam problem z takim zadaniem: https://szkopul.edu.pl/problemset/problem/o58fvuJW4HyYGvadjH-w0_jN/site/?key=statement

Napisałem bruta O(N^2), na 55pkt, że idę pętlą for od 0, do n-1, i zakładam, że ten element jest środkowy(j), i dla każdego elementu środkowego, idę 2 pętlą for, po idx-ach j+1, j+2, j+3... i zakładam, że on jest tym prawym, a ten lewy wyszukuję z statystyk, (znaczę, sobie wcześniej jakie odwiedziłem), przekształcając:

A_j - A_i = A_k - A_j => A_i = 2*A_j - A_k

Gdzie A_i, to element lewy, A_j to element środkowy, A_k to element prawy.

Kod:

#include <iostream>
#include <vector>

using namespace std;

int n = 0, wczytana_liczba = 0, wyn = 0;
vector<int> liczby;
int stat[200005] = {0};

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n;
    
    for (int i = 0; i < n; ++i)
    {
        cin >> wczytana_liczba;
        liczby.push_back(wczytana_liczba);
    }

    for (int j = 0; j < n; ++j)
    {
        for (int k = j+1; k < n; ++k)
            if (2 * liczby[j] - liczby[k] > 0)
                if (stat[2 * liczby[j] - liczby[k]] == 1)
                    wyn++;
        stat[liczby[j]]++;
    }

    cout << wyn << '\n';

    return 0;
}

Tylko to jest zawolne. Podejrzewam, że trzeba użyć jakiegoś drzewa przedziałowego lub czegoś takiego, ale nie mam pomysłu jak. Ma ktoś pomysł?

Z góry dziekuję za pomoc i poświęcony czas!

1 odpowiedź

+1 głos
odpowiedź 20 lutego 2023 przez Whistleroosh Maniak (57,400 p.)
wybrane 20 lutego 2023 przez pasjonat_algorytmiki
 
Najlepsza

Tutaj znalazłem skany z omówieniem no i okazuje się, ze to naprawdę trudne zadanie. Trzeba było skorzystać z bin searcha + hashy + palindromów. Takie coś mogłoby się pojawić na finale albo jako najtrudniejsze na I etapie

Podobne pytania

0 głosów
1 odpowiedź 1,045 wizyt
pytanie zadane 12 lutego 2023 w C i C++ przez polandonion Dyskutant (7,630 p.)
0 głosów
0 odpowiedzi 197 wizyt
pytanie zadane 30 sierpnia 2024 w Python przez Zavvys Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 24 października 2023 w C i C++ przez kamilek1234 Nowicjusz (120 p.)

93,430 zapytań

142,427 odpowiedzi

322,653 komentarzy

62,794 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...