Advertisement
franklinglzhou

Untitled

Mar 28th, 2023
842
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6.     int numberOfMessages;
  7.     string messageSenders;
  8.     cin >> numberOfMessages >> messageSenders;
  9.  
  10.     int minimumExcitement = 0;
  11.     int maximumExcitement = 0;
  12.     bool isStartF = false;
  13.     bool isEndF = false;
  14.  
  15.     // See if there is an end F;
  16.     if(messageSenders[0] == 'F'){
  17.         isStartF = true;
  18.     }
  19.     if(messageSenders[numberOfMessages - 1] == 'F'){
  20.         isEndF = true;
  21.     }
  22.  
  23.     // Pass #1: look for guaranteed ones
  24.     bool hasAllF = true;
  25.     if(messageSenders[0] != 'F'){
  26.         hasAllF = false;
  27.     }
  28.     for(int i = 0; i < numberOfMessages - 1; i++){
  29.         if(messageSenders[i] == messageSenders[i+1] && messageSenders[i] != 'F'){
  30.             minimumExcitement++;
  31.             maximumExcitement++;
  32.         }
  33.         if(messageSenders[i + 1] != 'F'){
  34.             hasAllF = false;
  35.         }
  36.     }
  37.     // Find the first F in the last part
  38.     int lastFStart = numberOfMessages-1;
  39.     int index = numberOfMessages - 1;
  40.  
  41.     while(messageSenders[index] == 'F' && index >= 0){
  42.         lastFStart--;
  43.         index--;
  44.         maximumExcitement++;
  45.     }
  46.  
  47.     index = 0;
  48.     // First go to the first non F; add one for each that exists to max
  49.     while(messageSenders[index] == 'F' && index < numberOfMessages){
  50.         maximumExcitement++;
  51.         index++;
  52.     }
  53.  
  54.     // Do the Looop; add floor(n/2) to max if it exist, add 1 to both if it is forced
  55.     char prevItem;
  56.     while(index < lastFStart){
  57.         int streakLength = 0;
  58.         if(messageSenders[index] == 'F'){
  59.             while(messageSenders[index] == 'F'){
  60.                 streakLength++;
  61.                 index++;
  62.             }
  63.             if(prevItem != messageSenders[index]){
  64.                 streakLength--;
  65.             }
  66.             if(streakLength % 2 == 0){
  67.                 minimumExcitement++;
  68.             }
  69.             maximumExcitement++;
  70.             maximumExcitement += streakLength;
  71.         }
  72.         prevItem = messageSenders[index];
  73.         index++;
  74.     }
  75.     if(hasAllF){
  76.         maximumExcitement = numberOfMessages -1;
  77.         minimumExcitement = 0;
  78.     }
  79.  
  80.     index = minimumExcitement;
  81.     if(isStartF || isEndF){
  82.         cout << maximumExcitement - minimumExcitement + 1 << endl;
  83.         for(int i = 0; i < maximumExcitement - minimumExcitement + 1; i++){
  84.             cout << index << endl;
  85.             index++;
  86.         }
  87.     } else {
  88.         cout << floor((maximumExcitement - minimumExcitement)/2 + 1) << endl;
  89.         for(int i = 0; i < floor((maximumExcitement - minimumExcitement)/2 + 1); i++){
  90.             cout << index << endl;
  91.             index += 2;
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement