提出 #75268544


ソースコード 拡げる

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
typedef long long ll;
#define REP(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)
#define FOR(i, a, b) for (int i = (a), i##_len = (b); i <= i##_len; ++i)
#define REV(i, a, b) for (int i = (a); i >= (b); --i)
int main() {
  int n;
  cin >> n;
  string s;
  cin >> s;

  vector<int> sum_a(n+1,0);
  vector<int> sum_b(n+1,0);
  vector<int> sum_c(n+1,0);

  REP(i,n) {
    if (s[i] == 'A')sum_a[i+1] = sum_a[i] + 1;
    else sum_a[i+1] = sum_a[i];

    if (s[i] == 'B')sum_b[i+1] = sum_b[i] + 1;
    else sum_b[i+1] = sum_b[i];

    if (s[i] == 'C')sum_c[i+1] = sum_c[i] + 1;
    else sum_c[i+1] = sum_c[i];
  }

  map<int, int> mp_a_to_b; // a-b
  map<int, int> mp_a_to_c; // a-c
  map<int, int> mp_b_to_c; // b-c
  map<pair<int,int>,int> mp_pair_1; // a-b,a-c
  map<pair<int,int>,int> mp_pair_2; // a-b,b-c
  map<pair<int,int>,int> mp_pair_3; // a-c,b-c
  map<tuple<int,int,int>,int> mp_tuple; // a-b,a-c,b-c

  ll sum = n;
  sum = sum * (n + 1) / 2;

  // 初期値
    mp_a_to_b[0]++;
    mp_a_to_c[0]++;
    mp_b_to_c[0]++;

    mp_pair_1[make_pair(0,0)]++;
    mp_pair_2[make_pair(0,0)]++;
    mp_pair_3[make_pair(0,0)]++;

    mp_tuple[make_tuple(0,0,0)]++;

  REP(i,n){ 
    int a_to_b = sum_a[i+1] - sum_b[i+1];
    int a_to_c = sum_a[i+1] - sum_c[i+1];
    int b_to_c = sum_b[i+1] - sum_c[i+1];

    // A=BまたはB=CまたはA=Cの数
    ll sub = mp_a_to_b[a_to_b] + mp_a_to_c[a_to_c] + mp_b_to_c[b_to_c]
             - mp_pair_1[make_pair(a_to_b,a_to_c)] - mp_pair_2[make_pair(a_to_b,b_to_c)] - mp_pair_3[make_pair(a_to_c,b_to_c)]
             + mp_tuple[make_tuple(a_to_b,a_to_c,b_to_c)];
    
    // printf("%d:%lld\n",i+1,sub);

    sum -= sub;


    mp_a_to_b[a_to_b]++;
    mp_a_to_c[a_to_c]++;
    mp_b_to_c[b_to_c]++;

    mp_pair_1[make_pair(a_to_b,a_to_c)]++;
    mp_pair_2[make_pair(a_to_b,b_to_c)]++;
    mp_pair_3[make_pair(a_to_c,b_to_c)]++;

    mp_tuple[make_tuple(a_to_b,a_to_c,b_to_c)]++;
  }



  cout << sum << endl;
}

提出情報

提出日時
問題 E - Unbalanced ABC Substrings
ユーザ knr_imtr
言語 C++23 (GCC 15.2.0)
得点 450
コード長 2103 Byte
結果 AC
実行時間 363 ms
メモリ 74732 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 450 / 450
結果
AC × 3
AC × 36
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 01_11.txt, 01_12.txt, 01_13.txt, 01_14.txt, 01_15.txt, 01_16.txt, 01_17.txt, 01_18.txt, 01_19.txt, 01_20.txt, 01_21.txt, 01_22.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 03_1.txt, 03_2.txt, 03_3.txt, 04_1.txt, 04_2.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 1 ms 3448 KiB
00_sample_02.txt AC 1 ms 3544 KiB
00_sample_03.txt AC 1 ms 3460 KiB
01_01.txt AC 1 ms 3400 KiB
01_02.txt AC 1 ms 3460 KiB
01_03.txt AC 1 ms 3400 KiB
01_04.txt AC 1 ms 3572 KiB
01_05.txt AC 1 ms 3408 KiB
01_06.txt AC 1 ms 3500 KiB
01_07.txt AC 1 ms 3544 KiB
01_08.txt AC 1 ms 3608 KiB
01_09.txt AC 1 ms 3392 KiB
01_10.txt AC 1 ms 3392 KiB
01_11.txt AC 84 ms 13132 KiB
01_12.txt AC 164 ms 37592 KiB
01_13.txt AC 7 ms 4484 KiB
01_14.txt AC 160 ms 35736 KiB
01_15.txt AC 132 ms 18212 KiB
01_16.txt AC 7 ms 5720 KiB
01_17.txt AC 139 ms 17700 KiB
01_18.txt AC 288 ms 65188 KiB
01_19.txt AC 149 ms 20840 KiB
01_20.txt AC 293 ms 65264 KiB
01_21.txt AC 148 ms 19480 KiB
01_22.txt AC 292 ms 65200 KiB
02_01.txt AC 363 ms 74564 KiB
02_02.txt AC 353 ms 74600 KiB
02_03.txt AC 343 ms 74608 KiB
02_04.txt AC 346 ms 74564 KiB
02_05.txt AC 335 ms 74572 KiB
02_06.txt AC 347 ms 74732 KiB
03_1.txt AC 13 ms 6056 KiB
03_2.txt AC 13 ms 5924 KiB
03_3.txt AC 13 ms 5936 KiB
04_1.txt AC 331 ms 65336 KiB
04_2.txt AC 332 ms 65200 KiB