Siema! Rozwiązuje zadanie na uczelnie, teoretycznie juz rozwiązałem ale system nie chce przepuścić ze względu na przekroczenie limitu pamięciowego:
Ogólnie w zadaniu chodzi o to, że jest N liczby zadań, każdy ma Z "priorytet"(tzn. im większa cyfra tym ważniejsze zadanie). W przypadku kiedy jest 0, oznacza to ze bedzie wybierane jedno zadanie z tych ktore sa (na lewo od 0, mniejsze indeksy). Trzeba pamietac ze 0 nie sa liczone do numeru zadania, czyli wyjscia. Tutaj przykładowe wejscie / wyjście:
Wejście:
7
3 0 0 2 8 8 0
Wyjście: // wyjsciem jest numer zadania, zaczynamy od 1
1
3 // jest 3, mimo tego ze 8 jest na 5 pozycji, nie liczymy 0
Wejście2:
10
1 1 1 1 2 0 0 0 0 0
Wyjście2:
5 // najpierw zadanie o priorytecie 2
1 // i dalej 1 , ta ktora pierwsza jest brana
2
3
4
#include <stdio.h>
int main(){
int N;
int Z;
scanf("%d", &N);
int przesuniecie;
int t[N];
int t_bez[N];
// int index;
for(int i = 0; i < N; i++){
scanf("%d", &Z);
t[i] = Z;
t_bez[i] = Z;
}
for(int i = 0; i < N; i++){
int maximum = t[i];
int pozycja = 1;
if(t[i] == 0){
int index_0 = i;
for(int c = 0; c < i; c++){
if (t[c] > maximum) //&& t[c] >= 0
{
maximum = t[c];
pozycja = c + 1;
}
}
if(t[pozycja - 1] > 0){
for(int j = pozycja - 1; j > 0; j--){
if(t_bez[j] == 0){
przesuniecie += 1;
}
}
printf("%d\n", pozycja - przesuniecie);
}
t[pozycja - 1] = -1;
przesuniecie = 0;
}
}
return 0;
}
A tu kod (nie chce go dzielic na funkcje)