Submission #39955523


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

void cumsum(vector<int> &vec)
{
  for (int i = 0; i < (int)vec.size() - 1; i++)
    vec[i + 1] += vec[i];
}

// 'R' について左側のみ判定
vector<bool> isok_sub(int N, string S)
{
  vector<int> sumR(N + 1, 0), sumP(N + 1, 0), sumS(N + 1, 0);
  for (int i = 0; i < N; i++)
  {
    if (S[i] == 'R')
      sumR[i + 1]++;
    else if (S[i] == 'P')
      sumP[i + 1]++;
    else
      sumS[i + 1]++;
  }
  cumsum(sumR), cumsum(sumP), cumsum(sumS);

  // 'S' のうち、左が OK であるような最も左のもの
  int j = 0;
  for (; j < N; j++)
  {
    if (S[j] != 'S')
      continue;
    
    if (sumR[j] == 0 || sumP[j] >= 1)
      break;
  }

  vector<bool> isok(N, false);
  for (int i = 0; i < N; i++)
  {
    if (S[i] != 'R')
      continue;
    if (i == 0)
    {
      isok[i] = true;
      continue;
    }
    
    if (sumR[i] - sumR[j] == 0 || sumP[i] - sumP[j] >= 1)
      isok[i] = true;
    else if (i != 0 && S[i - 1] == 'S' && (sumR[i - 1] == 0 || sumP[i - 1] >= 1))
      isok[i] = true;
  }
  return isok;
}

// 左と右をつきあわせて 'R' についてのみ判定し、個数を数える
int sub(int N, string S)
{
  string T = S;
  reverse(T.begin(), T.end());

  vector<bool> isok1 = isok_sub(N, S), isok2 = isok_sub(N, T);
  int ans = 0;
  for (int i = 0; i < N; i++)
  {
    if (isok1[i] && isok2[N - 1 - i])
      ans++;
  }
  return ans;
}

string rotate(int N, string S)
{
  string T;
  for (int i = 0; i < N; i++)
  {
    if (S[i] == 'R')
      T += 'S';
    else if (S[i] == 'S')
      T += 'P';
    else
      T += 'R';
  }
  return T;
}

int main()
{
  int N;
  string S;
  cin >> N >> S;

  string T = rotate(N, S);
  string U = rotate(N, T);
  int ans = sub(N, S) + sub(N, T) + sub(N, U);
  cout << ans << endl;
}

Submission Info

Submission Time
Task L - Small RPS Tournament
User miscalculation53
Language C++ (GCC 9.2.1)
Score 100
Code Size 1902 Byte
Status AC
Exec Time 51 ms
Memory 9220 KiB

Judge Result

Set Name Sample Subtask1 Subtask2 All
Score / Max Score 0 / 0 10 / 10 40 / 40 50 / 50
Status
AC × 3
AC × 21
AC × 37
AC × 74
Set Name Test Cases
Sample 00_sample_00, 00_sample_01, 00_sample_02
Subtask1 00_sample_00, 00_sample_01, 00_sample_02, 01_min_00, 01_min_01, 01_min_02, 01_min_03, 01_min_04, 02_small_00, 02_small_01, 02_small_02, 02_small_03, 02_small_04, 03_small_max_00, 03_small_max_01, 03_small_max_02, 04_small_1type_00, 05_small_2types_00, 05_small_2types_01, 05_small_2types_02, 05_small_2types_03
Subtask2 00_sample_00, 00_sample_01, 00_sample_02, 01_min_00, 01_min_01, 01_min_02, 01_min_03, 01_min_04, 02_small_00, 02_small_01, 02_small_02, 02_small_03, 02_small_04, 03_small_max_00, 03_small_max_01, 03_small_max_02, 04_small_1type_00, 05_small_2types_00, 05_small_2types_01, 05_small_2types_02, 05_small_2types_03, 12_medium_00, 12_medium_01, 12_medium_02, 12_medium_03, 12_medium_04, 13_medium_max_00, 13_medium_max_01, 13_medium_max_02, 14_medium_1type_00, 14_medium_1type_01, 15_medium_2types_00, 15_medium_2types_01, 15_medium_2types_02, 15_medium_2types_03, 15_medium_2types_04, 15_medium_2types_05
All 00_sample_00, 00_sample_01, 00_sample_02, 01_min_00, 01_min_01, 01_min_02, 01_min_03, 01_min_04, 02_small_00, 02_small_01, 02_small_02, 02_small_03, 02_small_04, 03_small_max_00, 03_small_max_01, 03_small_max_02, 04_small_1type_00, 05_small_2types_00, 05_small_2types_01, 05_small_2types_02, 05_small_2types_03, 12_medium_00, 12_medium_01, 12_medium_02, 12_medium_03, 12_medium_04, 13_medium_max_00, 13_medium_max_01, 13_medium_max_02, 14_medium_1type_00, 14_medium_1type_01, 15_medium_2types_00, 15_medium_2types_01, 15_medium_2types_02, 15_medium_2types_03, 15_medium_2types_04, 15_medium_2types_05, 22_large_00, 22_large_01, 22_large_02, 22_large_03, 22_large_04, 23_large_max_00, 23_large_max_01, 23_large_max_02, 23_large_max_03, 23_large_max_04, 23_large_max_05, 23_large_max_06, 23_large_max_07, 23_large_max_08, 23_large_max_09, 24_large_1type_00, 24_large_1type_01, 24_large_1type_02, 24_large_1type_03, 24_large_1type_04, 24_large_1type_05, 25_large_2types_00, 25_large_2types_01, 25_large_2types_02, 25_large_2types_03, 25_large_2types_04, 25_large_2types_05, 25_large_2types_06, 25_large_2types_07, 25_large_2types_08, 25_large_2types_09, 25_large_2types_10, 25_large_2types_11, 25_large_2types_12, 25_large_2types_13, 25_large_2types_14, 25_large_2types_15
Case Name Status Exec Time Memory
00_sample_00 AC 1 ms 3336 KiB
00_sample_01 AC 3 ms 3400 KiB
00_sample_02 AC 2 ms 3396 KiB
01_min_00 AC 2 ms 3388 KiB
01_min_01 AC 1 ms 3364 KiB
01_min_02 AC 2 ms 3580 KiB
01_min_03 AC 2 ms 3448 KiB
01_min_04 AC 2 ms 3384 KiB
02_small_00 AC 2 ms 3548 KiB
02_small_01 AC 5 ms 3496 KiB
02_small_02 AC 2 ms 3552 KiB
02_small_03 AC 2 ms 3496 KiB
02_small_04 AC 3 ms 3436 KiB
03_small_max_00 AC 2 ms 3560 KiB
03_small_max_01 AC 2 ms 3452 KiB
03_small_max_02 AC 2 ms 3560 KiB
04_small_1type_00 AC 2 ms 3432 KiB
05_small_2types_00 AC 2 ms 3432 KiB
05_small_2types_01 AC 2 ms 3496 KiB
05_small_2types_02 AC 2 ms 3404 KiB
05_small_2types_03 AC 2 ms 3428 KiB
12_medium_00 AC 2 ms 3528 KiB
12_medium_01 AC 2 ms 3500 KiB
12_medium_02 AC 2 ms 3424 KiB
12_medium_03 AC 2 ms 3468 KiB
12_medium_04 AC 2 ms 3504 KiB
13_medium_max_00 AC 3 ms 3616 KiB
13_medium_max_01 AC 2 ms 3612 KiB
13_medium_max_02 AC 2 ms 3464 KiB
14_medium_1type_00 AC 2 ms 3516 KiB
14_medium_1type_01 AC 2 ms 3556 KiB
15_medium_2types_00 AC 2 ms 3468 KiB
15_medium_2types_01 AC 2 ms 3468 KiB
15_medium_2types_02 AC 3 ms 3492 KiB
15_medium_2types_03 AC 2 ms 3488 KiB
15_medium_2types_04 AC 2 ms 3460 KiB
15_medium_2types_05 AC 1 ms 3492 KiB
22_large_00 AC 11 ms 3716 KiB
22_large_01 AC 29 ms 5440 KiB
22_large_02 AC 37 ms 7664 KiB
22_large_03 AC 33 ms 7472 KiB
22_large_04 AC 23 ms 5296 KiB
23_large_max_00 AC 51 ms 9028 KiB
23_large_max_01 AC 50 ms 8996 KiB
23_large_max_02 AC 50 ms 9176 KiB
23_large_max_03 AC 37 ms 9056 KiB
23_large_max_04 AC 45 ms 9036 KiB
23_large_max_05 AC 35 ms 8996 KiB
23_large_max_06 AC 41 ms 9056 KiB
23_large_max_07 AC 35 ms 9040 KiB
23_large_max_08 AC 49 ms 9032 KiB
23_large_max_09 AC 17 ms 5980 KiB
24_large_1type_00 AC 20 ms 5324 KiB
24_large_1type_01 AC 29 ms 8644 KiB
24_large_1type_02 AC 32 ms 9056 KiB
24_large_1type_03 AC 31 ms 9052 KiB
24_large_1type_04 AC 21 ms 7180 KiB
24_large_1type_05 AC 33 ms 9004 KiB
25_large_2types_00 AC 14 ms 4304 KiB
25_large_2types_01 AC 10 ms 3812 KiB
25_large_2types_02 AC 49 ms 9044 KiB
25_large_2types_03 AC 46 ms 9036 KiB
25_large_2types_04 AC 46 ms 9032 KiB
25_large_2types_05 AC 46 ms 9152 KiB
25_large_2types_06 AC 32 ms 6772 KiB
25_large_2types_07 AC 41 ms 7500 KiB
25_large_2types_08 AC 20 ms 5340 KiB
25_large_2types_09 AC 45 ms 9000 KiB
25_large_2types_10 AC 39 ms 7872 KiB
25_large_2types_11 AC 44 ms 8996 KiB
25_large_2types_12 AC 24 ms 6788 KiB
25_large_2types_13 AC 31 ms 8992 KiB
25_large_2types_14 AC 28 ms 7924 KiB
25_large_2types_15 AC 32 ms 9220 KiB