#include<cstdio> #define N 300005 long ileP[N]; long ileL[N]; char mro[N]; // przedział obustronnie domknięty static int liczP(int start, int end) { if (start > end) { return 0; } return ileP[end] - ileP[start - 1]; } // przedział obustronnie domknięty static int liczL(int start, int end) { if (start > end) { return 0; } return ileL[end] - ileL[start - 1]; } static int result(int a, int b) { if (a > b) { return 2 * b + 1; } else { return 2 * a; } } int main() { int n; scanf("%d\n", &n); // iteracja 1..n for (int i = 1; i <= n; i++) { mro[i] = getc(stdin); if (mro[i] == 'P') { ileP[i] = ileP[i - 1] + 1; ileL[i] = ileL[i - 1]; } else { ileP[i] = ileP[i - 1]; ileL[i] = ileL[i - 1] + 1; } } // iteracja 1..n for (int i = 1; i <= n; i++) { int a; int b; if (mro[i] == 'P') { a = liczL(i + 1, n); b = liczP(1, i - 1); } else { a = liczP(1, i - 1); b = liczL(i + 1, n); } printf("%d ", result(a, b)); } 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 | #include<cstdio> #define N 300005 long ileP[N]; long ileL[N]; char mro[N]; // przedział obustronnie domknięty static int liczP(int start, int end) { if (start > end) { return 0; } return ileP[end] - ileP[start - 1]; } // przedział obustronnie domknięty static int liczL(int start, int end) { if (start > end) { return 0; } return ileL[end] - ileL[start - 1]; } static int result(int a, int b) { if (a > b) { return 2 * b + 1; } else { return 2 * a; } } int main() { int n; scanf("%d\n", &n); // iteracja 1..n for (int i = 1; i <= n; i++) { mro[i] = getc(stdin); if (mro[i] == 'P') { ileP[i] = ileP[i - 1] + 1; ileL[i] = ileL[i - 1]; } else { ileP[i] = ileP[i - 1]; ileL[i] = ileL[i - 1] + 1; } } // iteracja 1..n for (int i = 1; i <= n; i++) { int a; int b; if (mro[i] == 'P') { a = liczL(i + 1, n); b = liczP(1, i - 1); } else { a = liczP(1, i - 1); b = liczL(i + 1, n); } printf("%d ", result(a, b)); } return 0; } |