#include <iostream> #include <vector> namespace { using std::ios_base, std::cin, std::cout; using std::vector; constexpr char P = 'P'; constexpr char L = 'L'; }; int main() { // Ustawienia strumieni ios_base::sync_with_stdio(false); cin.tie(NULL); // Czytanie danych i obliczanie wyników size_t n; char c; size_t ile_P = 0; cin >> n; vector<size_t> cnts(n, 0); vector<size_t> begs, ends; for (size_t k = 0; k < n; ++k) { cin >> c; if (c == P) { ++ile_P; } else if (ile_P > 0) { // c == L ++cnts[k]; ++cnts[k - ile_P]; if (ile_P > 1) { begs.push_back(k - ile_P + 1); ends.push_back(k - 1); } } } // Osobne uwzględnianie przedziałów += 2 dla poprawy wydajności size_t factor = 0; size_t begs_i = 0, ends_i = 0; for (size_t k = 0; k < n; ++k) { if (begs_i < begs.size() && begs[begs_i] == k) { factor += 2; ++begs_i; } cnts[k] += factor; if (ends_i < ends.size() && ends[ends_i] == k) { factor -= 2; ++ends_i; } } // Prezentacja wyników for (auto const & c : cnts) cout << c << ' '; cout << '\n'; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <iostream> #include <vector> namespace { using std::ios_base, std::cin, std::cout; using std::vector; constexpr char P = 'P'; constexpr char L = 'L'; }; int main() { // Ustawienia strumieni ios_base::sync_with_stdio(false); cin.tie(NULL); // Czytanie danych i obliczanie wyników size_t n; char c; size_t ile_P = 0; cin >> n; vector<size_t> cnts(n, 0); vector<size_t> begs, ends; for (size_t k = 0; k < n; ++k) { cin >> c; if (c == P) { ++ile_P; } else if (ile_P > 0) { // c == L ++cnts[k]; ++cnts[k - ile_P]; if (ile_P > 1) { begs.push_back(k - ile_P + 1); ends.push_back(k - 1); } } } // Osobne uwzględnianie przedziałów += 2 dla poprawy wydajności size_t factor = 0; size_t begs_i = 0, ends_i = 0; for (size_t k = 0; k < n; ++k) { if (begs_i < begs.size() && begs[begs_i] == k) { factor += 2; ++begs_i; } cnts[k] += factor; if (ends_i < ends.size() && ends[ends_i] == k) { factor -= 2; ++ends_i; } } // Prezentacja wyników for (auto const & c : cnts) cout << c << ' '; cout << '\n'; return 0; } |