Submission #25875

#TimeUsernameProblemLanguageResultExecution timeMemory
25875model_codeTake-out (POI13_usu)C++11
33 / 100
16 ms13896 KiB
/************************************************************************* * * * XX Olimpiada Informatyczna * * * * Zadanie: Usuwanka * * Autor: Igor Adamski * * Zlozonosc czasowa: O(n) * * Zlozonosc pamieciowa: O(n) * * Opis: Rozwiazanie wzorcowe, wersja ze stosem * * * *************************************************************************/ #include<iostream> using namespace std; const int MAXN = 1000000; int stos[MAXN+1]; int suma[MAXN+1]; /* suma[i] = stos[1] + stos[2] + ... + stos[i] */ int s; int wynik[MAXN+1]; /* stos na ktorym beda odkladane kolejne ruchy */ int w; /* szczyt tego stosu */ int n, k; int main(int argc, char *argv[]) { ios_base::sync_with_stdio(0); cin >> n >> k; for(int i=1; i<=n; ++i) { char z; cin >> z; int val; if(z == 'b') val = 1; else val = -k; /* Dodanie wartosci na stos */ ++s; stos[s] = i; suma[s] = suma[s-1] + val; /* Jesli suma k+1 elementow z wierzchu jest rowna 0 to jest to poprawny ruch */ if(s >= k+1 && suma[s] - suma[s-k-1] == 0) { for(int j=0; j<k+1; ++j) wynik[w++] = stos[s--]; } } for(int i=0; i<n/(k+1); ++i) { for(int j=0; j<k+1; ++j) cout << wynik[--w] << ' '; cout << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...