/* 2024 * Maciej Szeptuch */ #include <cstdio> const int MAX_ANTS = 300001; int ants; char side[MAX_ANTS]; int total_right; int current_right; inline int after_right(int position) { return total_right - current_right - (side[position] == 'P'); } inline int after_left(int position) { return ants - position - 1 - after_right(position); } inline int hits(int forward, int backward) { if(forward == 0) return 0; if(backward == 0) return 1; if(forward <= backward) return 2 * forward; return 2 * backward + 1; } int main(void) { scanf("%d %s", &ants, side); for(int a = 0; a < ants; ++a) total_right += side[a] == 'P'; for(int a = 0; a < ants; ++a) { if(side[a] == 'P') { printf("%d ", hits(after_left(a), current_right)); current_right += 1; } else printf("%d ", hits(current_right, after_left(a))); } puts(""); 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 | /* 2024 * Maciej Szeptuch */ #include <cstdio> const int MAX_ANTS = 300001; int ants; char side[MAX_ANTS]; int total_right; int current_right; inline int after_right(int position) { return total_right - current_right - (side[position] == 'P'); } inline int after_left(int position) { return ants - position - 1 - after_right(position); } inline int hits(int forward, int backward) { if(forward == 0) return 0; if(backward == 0) return 1; if(forward <= backward) return 2 * forward; return 2 * backward + 1; } int main(void) { scanf("%d %s", &ants, side); for(int a = 0; a < ants; ++a) total_right += side[a] == 'P'; for(int a = 0; a < ants; ++a) { if(side[a] == 'P') { printf("%d ", hits(after_left(a), current_right)); current_right += 1; } else printf("%d ", hits(current_right, after_left(a))); } puts(""); return 0; } |