/*#ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif //*/ #include <iostream> #include <string> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; /*const int LL = 'L' << 8 + 'L'; const int LP = 'L' << 8 + 'P'; const int PL = 'P' << 8 + 'L'; const int PP = 'P' << 8 + 'P';//*/ int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n/*, odbic = 0*/; uint n_1; string slowo; vector<int> odbicia; cin >> n >> slowo; n_1 = n - 1; odbicia.resize(n); odbicia[0] = slowo[0] == 'L'? 0 : 1; for(uint i = 0; i < n_1; ++i) { if(slowo[i] == 'L') { if(slowo[i+1] == 'L') odbicia[i+1] = odbicia[i]; else // odbicia[i+1] == 'P' odbicia[i+1] = odbicia[i] + 1; } else { // odbicia[i] == 'P' if(slowo[i+1] == 'L') odbicia[i+1] = odbicia[i] + 1; else // odbicia[i+1] == 'P' odbicia[i+1] = odbicia[i] + 2; } } if(odbicia[n_1] > 0) odbicia[n_1] = slowo[n_1] == 'P'? 0 : 1; for(uint i = n_1; i > 0; --i) { int tmp; if(slowo[i] == 'P') { if(slowo[i-1] == 'P') tmp = odbicia[i]; else // odbicia[i-1] == 'L' tmp = odbicia[i] + 1; } else { // odbicia[i] == 'L' if(slowo[i-1] == 'P') tmp = odbicia[i] + 1; else // odbicia[i-1] == 'L' tmp = odbicia[i] + 2; } if(tmp > odbicia[i-1]) break; odbicia[i-1] = tmp; } /* for(; ; ) { int odbic1 = odbic; if(slowo[i] == 'L') { while(++i < j && slowo[i] == 'L') odbicia[i] = odbic1; } int zmiana = slowo[i] << 8 + slowo[i+1]; switch(zmiana) { case LL: break; case LP: odbic1 += 2; break; case PL: break; case PP: break; default: ++odbic1; } }//*/ for(uint i = 0; i < n_1; ++i) cout << odbicia[i] << ' '; cout << odbicia[n_1] << endl; 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | /*#ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif //*/ #include <iostream> #include <string> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; /*const int LL = 'L' << 8 + 'L'; const int LP = 'L' << 8 + 'P'; const int PL = 'P' << 8 + 'L'; const int PP = 'P' << 8 + 'P';//*/ int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n/*, odbic = 0*/; uint n_1; string slowo; vector<int> odbicia; cin >> n >> slowo; n_1 = n - 1; odbicia.resize(n); odbicia[0] = slowo[0] == 'L'? 0 : 1; for(uint i = 0; i < n_1; ++i) { if(slowo[i] == 'L') { if(slowo[i+1] == 'L') odbicia[i+1] = odbicia[i]; else // odbicia[i+1] == 'P' odbicia[i+1] = odbicia[i] + 1; } else { // odbicia[i] == 'P' if(slowo[i+1] == 'L') odbicia[i+1] = odbicia[i] + 1; else // odbicia[i+1] == 'P' odbicia[i+1] = odbicia[i] + 2; } } if(odbicia[n_1] > 0) odbicia[n_1] = slowo[n_1] == 'P'? 0 : 1; for(uint i = n_1; i > 0; --i) { int tmp; if(slowo[i] == 'P') { if(slowo[i-1] == 'P') tmp = odbicia[i]; else // odbicia[i-1] == 'L' tmp = odbicia[i] + 1; } else { // odbicia[i] == 'L' if(slowo[i-1] == 'P') tmp = odbicia[i] + 1; else // odbicia[i-1] == 'L' tmp = odbicia[i] + 2; } if(tmp > odbicia[i-1]) break; odbicia[i-1] = tmp; } /* for(; ; ) { int odbic1 = odbic; if(slowo[i] == 'L') { while(++i < j && slowo[i] == 'L') odbicia[i] = odbic1; } int zmiana = slowo[i] << 8 + slowo[i+1]; switch(zmiana) { case LL: break; case LP: odbic1 += 2; break; case PL: break; case PP: break; default: ++odbic1; } }//*/ for(uint i = 0; i < n_1; ++i) cout << odbicia[i] << ' '; cout << odbicia[n_1] << endl; return 0; } |