Zadanie wieża 2[optymalizacja]

0

Witam ;)
Jakieś pomysły na optymalizację zadania "wieża 2"?
http://main.edu.pl/pl/archive/ilocamp/2010/wiz

Mój kod załącznik

0

raczej wklej kod tutaj w

 bo nikomu sie nie chce sciagac nie wiadomo czego
0
#include<iostream>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);
// Wczytywanie danych i deklaracja
unsigned long long int schodek,maksymalna=0,tab[500001]={},osoba,pierwszy_schodek;
unsigned int ilosc_schodkow,osoby;
bool test = false;
cin >> ilosc_schodkow >> osoby ;
// Ustawienie wszystkich schodkow wyzszych od maksymalnego na rowny maksymalnemu
for(int j = 0 ; j < ilosc_schodkow ; j++)
{
    cin >> schodek ;
    if(maksymalna<schodek)
        maksymalna=schodek;

    tab[j]=maksymalna;
}

for(int j = 0 ; j < osoby ; j++)
{
    cin >> osoba;
        if(ilosc_schodkow<=0)
            cout<<"0 ";
        else
        for(int i = ilosc_schodkow-1; i >=0 ; i--)
            {
                if(osoba>tab[i])
                {
                        cout<<i+1<<" ";
                        ilosc_schodkow=i;
                        break;
                }
            }

}
return 0;
}
0

chryste panie, sformatuj to jak biały człowiek

0

Proszę... Skoro format to dla Ciebie taki problem.

0

To nie kosztuje wiele, naprawdę, 3 tapnięcia w klawiaturę na dobrym IDE.

#include <iostream>
using namespace std;

int main () {
  ios_base::sync_with_stdio(0);

  // Wczytywanie danych i deklaracja
  unsigned long long int schodek, maksymalna = 0, tab[500001] = {}, osoba, pierwszy_schodek;
  unsigned int ilosc_schodkow, osoby;
  bool test = false;
  cin >> ilosc_schodkow >> osoby;

  // Ustawienie wszystkich schodkow wyzszych od maksymalnego na rowny maksymalnemu
  for (int j = 0; j < ilosc_schodkow; j++) {
    cin >> schodek;
    if (maksymalna < schodek)
      maksymalna = schodek;

    tab[j] = maksymalna;
  }

  for (int j = 0; j < osoby; j++) {
    cin >> osoba;

    if (ilosc_schodkow <= 0)
      cout << "0 ";

    else {
      for (int i = ilosc_schodkow - 1; i >= 0; i--) {
        if (osoba > tab[i]) {
          cout << i + 1 << " ";
          ilosc_schodkow = i;
          break;
        }
      }
    }
  }
  return 0;
}

Nie lepiej?

0

Lepiej ;) ktoś coś?

0

zamiast przeszukiwać posortowaną tablicę tab liniowo, możesz spróbować poszukiwania binarnego

0

Binarne wywlaszcza w tym samym teście co bez binarnego :(

0

for(int i = ilosc_schodkow-1; i >=0 ; i--)
nie musisz zaczynac od "ilosc_schodkow-1", z każdą iteracją wartość ta zmniejsza się o co najmniej jeden

zwiększenie szybkości powoduje również zastąpienie cout przez printf

 0  	 OK 	0.00s/0.50s 	0/0
 1  	 OK 	0.00s/0.50s 	14/14
 2  	 OK 	0.01s/0.50s 	14/14
 3  	 OK 	0.01s/0.50s 	14/14
 4a  	 OK 	0.27s/1.00s 	14/14
 4b  	 OK 	0.32s/1.00s 	14/14
 5  	 OK 	0.40s/1.00s 	15/15
 6  	 OK 	0.41s/1.00s 	15/15

1 użytkowników online, w tym zalogowanych: 0, gości: 1