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

Pytanie odnośnie zadnia

Object Storage Arubacloud
+1 głos
123 wizyt
pytanie zadane 22 kwietnia 2022 w C i C++ przez polandonion Mądrala (7,100 p.)

Witam, nie chcę zajmować dużo czasu, więc przejde do sedna; jest jakiś pomysł, który można wykorzystać, aby zrobić ten program szybciej? Co prawda to rozwiązanie daje mi maksymalną liczbę punktów (pomysł ze zliczniem nie daje rady, bo liczby są z zakresu -10^18 ... 10^18), ale jestem ciekaw innych algorytmów. Dziękuję za odpowiedzi.

Tutaj zadanie:

A oto mój kod źródłowy programu:

#include <bits/stdc++.h>
using namespace std;
long long tab[1000009];
int main()
{
    ios::sync_with_stdio(0); // linijka przyspieszajaca program
    int i=0,cb=1,cbAkt=1; // i - iterator, cb - najwieksze combo, cbAkt - aktualne combo
    do{
        cin>>tab[i];
    }while(tab[i++]);
    sort(tab,tab+i);
    long long aktL=tab[0],l=tab[0]; // aktL - aktualna liczba, na którą wskazuje iterator j, l - liczba najczesciej wystepujaca
    for(int j=1; j<i; j++){
        if(aktL==tab[j]) cbAkt++;
        else cbAkt=1;
        cb=max(cb,cbAkt);
        if(cbAkt==cb) l=tab[j];
        aktL=tab[j];
    }
    cout<<l;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 22 kwietnia 2022 przez Wiciorny Ekspert (270,910 p.)
// źródło https://eduinf.waw.pl/inf/alg/001_search/0036.php
//---------------------------

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>

using namespace std;

int main( )
{
  const int N = 400;
  int Z [ N ], i, j, L, W, maxL, maxW;

// Generujemy zawartość Z [ ] 

  srand ( ( unsigned )time ( NULL ) );
  for( i = 0; i < N; i++ ) Z [ i ] = rand( ) % 100;

// Wyszukujemy najczęstszą wartość

  maxL = 0;
  for( i = 0; i < N; i++ )
  {
    W = Z [ i ]; L = 0;
    for( j = 0; j < N; j++ ) if( Z [ j ] == W ) L++;
    if( L > maxL )
    {
      maxL = L; maxW = W;
    }
  }

// Wypisujemy tablicę

  for( i = 0; i < N; i++ )
    if( Z [ i ] == maxW ) cout << " >" << setw ( 2 ) << Z [ i ];
    else                  cout << setw ( 4 ) << Z [ i ];

// Wypisujemy najczęstszy element oraz liczbę wystąpień

  cout << endl << maxW << ": " << maxL << endl << endl;
  return 0;
} 

przykład.
Krótszy kod, nie oznacza że jest to lepszy ;pamięciowo kod', czytelniejszy czy też bardziej optymalny.
Problemem u Ciebie jest to, że wykonujesz np funkcje sortowania tablicy 

sort(tab,tab+i)

zajrzyj co się dzieje w środku... to się zdziwisz jak mocno to obciąża cały proces. 

    do{
        cin>>tab[i];
    }while(tab[i++]);

to jest dosyć ryzykowane szczególnie opieranie pętli while na elementach tablicy w których indeks jest inkrementowany, polecam klasyczny for. 

Podobne pytania

–1 głos
4 odpowiedzi 436 wizyt
pytanie zadane 13 maja 2021 w C i C++ przez Eriss69 Gaduła (4,470 p.)
0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 21 sierpnia 2020 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)
0 głosów
2 odpowiedzi 408 wizyt
pytanie zadane 15 lutego 2016 w C i C++ przez Kazik98x Obywatel (1,780 p.)

92,636 zapytań

141,506 odpowiedzi

319,886 komentarzy

62,015 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...