// Jan Zakrzewski #include <bits/stdc++.h> using namespace std; int constexpr N = 3e5 + 10; int n; // liczba mrówek, jak w treści zadania char s[N]; // początkowe zwroty mrówek, jak w treści zadania int a[N]; // 1 <= i <= n, a[i] = liczba mrówek na lewo od i-tej mrówki, które początkowo idą w prawo int b[N]; // 1 <= i <= n, b[i] = liczba mrówek na prawo od i-tej mrówki, które początkowo idą w lewo int odp[N]; // 1 <= i <= n, odp[i] = liczba odbić i-tej mrówki /* Saved for potential future debugging int L(int, int); int P(int, int); int L(int z_lewej, int z_prawej) { if(z_lewej == 0) return 0; else return 1 + P(z_lewej - 1, z_prawej); } int P(int z_lewej, int z_prawej) { if(z_prawej == 0) return 0; else return 1 + L(z_lewej, z_prawej - 1); }*/ int LL(int z_lewej, int z_prawej) { if(z_lewej > z_prawej) return 2 * z_prawej + 1; else return 2 * z_lewej; } int PP(int z_lewej, int z_prawej) { if(z_lewej < z_prawej) return 2 * z_lewej + 1; else return 2 * z_prawej; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin >> s; for(int i = n; i >= 1; --i) s[i] = s[i-1]; a[1] = 0; for(int i = 2; i <= n; ++i) { a[i] = a[i - 1]; if(s[i - 1] == 'P') ++a[i]; } b[n] = 0; for(int i = n - 1; i >= 1; --i) { b[i] = b[i + 1]; if(s[i + 1] == 'L') ++b[i]; } for(int i = 1; i <= n; ++i) { if(s[i] == 'L') cout << LL(a[i], b[i]) << " "; else if(s[i] == 'P') cout << PP(a[i], b[i]) << " "; else cout << "What are you doing? "; } 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 60 61 62 63 64 65 | // Jan Zakrzewski #include <bits/stdc++.h> using namespace std; int constexpr N = 3e5 + 10; int n; // liczba mrówek, jak w treści zadania char s[N]; // początkowe zwroty mrówek, jak w treści zadania int a[N]; // 1 <= i <= n, a[i] = liczba mrówek na lewo od i-tej mrówki, które początkowo idą w prawo int b[N]; // 1 <= i <= n, b[i] = liczba mrówek na prawo od i-tej mrówki, które początkowo idą w lewo int odp[N]; // 1 <= i <= n, odp[i] = liczba odbić i-tej mrówki /* Saved for potential future debugging int L(int, int); int P(int, int); int L(int z_lewej, int z_prawej) { if(z_lewej == 0) return 0; else return 1 + P(z_lewej - 1, z_prawej); } int P(int z_lewej, int z_prawej) { if(z_prawej == 0) return 0; else return 1 + L(z_lewej, z_prawej - 1); }*/ int LL(int z_lewej, int z_prawej) { if(z_lewej > z_prawej) return 2 * z_prawej + 1; else return 2 * z_lewej; } int PP(int z_lewej, int z_prawej) { if(z_lewej < z_prawej) return 2 * z_lewej + 1; else return 2 * z_prawej; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin >> s; for(int i = n; i >= 1; --i) s[i] = s[i-1]; a[1] = 0; for(int i = 2; i <= n; ++i) { a[i] = a[i - 1]; if(s[i - 1] == 'P') ++a[i]; } b[n] = 0; for(int i = n - 1; i >= 1; --i) { b[i] = b[i + 1]; if(s[i + 1] == 'L') ++b[i]; } for(int i = 1; i <= n; ++i) { if(s[i] == 'L') cout << LL(a[i], b[i]) << " "; else if(s[i] == 'P') cout << PP(a[i], b[i]) << " "; else cout << "What are you doing? "; } cout << "\n"; return 0; } |