#include<iostream> #include <vector> using namespace std; vector<char> mrowki; vector<int> zmiany; void ruch2(int pocz, int kon) { int i; ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (pocz + 2 < kon) { int pol = (pocz+kon)/ 2; ruch2( pocz, pol); ruch2( pol+1, kon); int lp = 0; int ll = 0; int pp = 0; int zm, zw; int ind = pocz; while (ind <= kon and mrowki[ind] == 'L') { ind+=1; lp+=1; } while (ind <= kon and mrowki[ind] == 'P') { ind+=1; pp+=1; } while (ind <= kon and mrowki[ind] == 'L') { ind+=1; ll+=1; } for (i=0; i <ll; i++) mrowki[pocz+i+lp] = 'L'; for (i=0; i <pp; i++) mrowki[pocz+i+lp+ll] = 'P'; zw = min(ll,pp); zm = max(ll,pp); int dod = 1; for (i=0; i <zw; i++) { zmiany[pocz+i+lp] += dod; zmiany[pocz+pp+ll+lp-i-1] += dod; dod+=2; } dod-=1; for (i=0; i <(zm-zw); i++) zmiany[pocz+lp+i+zw] += dod; return; } bool dalej = true; while (dalej) { dalej = false; i = pocz; while (i<kon) { if (mrowki[i] == 'P' && mrowki[i+1] == 'L') { mrowki[i] = 'L'; mrowki[i+1] = 'P'; zmiany[i]+= 1; zmiany[i+1]+= 1; dalej = true; } i+=1; } } } int main() { int liczba; char el; cin >> liczba; for (int i=0; i < liczba; i++) { cin >> el; mrowki.push_back(el); zmiany.push_back(0); } ruch2(0, liczba-1); for (int i=0; i <liczba; i++) cout << zmiany[i] << " "; cout << "\n"; }
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include<iostream> #include <vector> using namespace std; vector<char> mrowki; vector<int> zmiany; void ruch2(int pocz, int kon) { int i; ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (pocz + 2 < kon) { int pol = (pocz+kon)/ 2; ruch2( pocz, pol); ruch2( pol+1, kon); int lp = 0; int ll = 0; int pp = 0; int zm, zw; int ind = pocz; while (ind <= kon and mrowki[ind] == 'L') { ind+=1; lp+=1; } while (ind <= kon and mrowki[ind] == 'P') { ind+=1; pp+=1; } while (ind <= kon and mrowki[ind] == 'L') { ind+=1; ll+=1; } for (i=0; i <ll; i++) mrowki[pocz+i+lp] = 'L'; for (i=0; i <pp; i++) mrowki[pocz+i+lp+ll] = 'P'; zw = min(ll,pp); zm = max(ll,pp); int dod = 1; for (i=0; i <zw; i++) { zmiany[pocz+i+lp] += dod; zmiany[pocz+pp+ll+lp-i-1] += dod; dod+=2; } dod-=1; for (i=0; i <(zm-zw); i++) zmiany[pocz+lp+i+zw] += dod; return; } bool dalej = true; while (dalej) { dalej = false; i = pocz; while (i<kon) { if (mrowki[i] == 'P' && mrowki[i+1] == 'L') { mrowki[i] = 'L'; mrowki[i+1] = 'P'; zmiany[i]+= 1; zmiany[i+1]+= 1; dalej = true; } i+=1; } } } int main() { int liczba; char el; cin >> liczba; for (int i=0; i < liczba; i++) { cin >> el; mrowki.push_back(el); zmiany.push_back(0); } ruch2(0, liczba-1); for (int i=0; i <liczba; i++) cout << zmiany[i] << " "; cout << "\n"; } |