Submission #3337296


Source Code Expand

#include <bits/stdc++.h>
#define ll long long
#define REP(i, n) for (ll (i) = 0; (i) < (n); (i)++)
#define REPI(i, a, b) for (ll (i) = (a); (i) < (b); (i)++)
#define int long long
using namespace std;
using II = pair<int, int>;
using VI = vector<int>;
using VVI = vector<VI>;
using VVVI = vector<VVI>;
using VII = vector<II>;

class SuffixArray {
public:
  int N;
  string S;
  VI rank; // rank[i]: iから始まるsuffixの辞書順での順位
  VI sorted; // sorted[i]: suffixが辞書順i番目となる開始位置のindex
  SuffixArray(string s) {
    S = s;
    N = S.size();
    sorted = VI(N); rank = VI(N);
    REP (i, N) {
      sorted[i] = i;
      rank[i] = S[i];
    }

    int k;
    function<bool(int, int)> compare_sa = [this, &k](int i, int j) {
      if (rank[i] != rank[j]) { return rank[i] < rank[j]; }
      int ri = i + k < N ? rank[i + k] : -1;
      int rj = j + k < N ? rank[j + k] : -1;
      return ri < rj;
    };

    for (k = 1; k < N; k *= 2) {
      sort(sorted.begin(), sorted.end(), compare_sa);
      VI tmp(N, 0);
      REPI (i, 1, N) {
        tmp[sorted[i]] = tmp[sorted[i - 1]] + compare_sa(sorted[i - 1], sorted[i]);
      }
      rank = tmp;
    }
  }

  // Tが存在する場合はSにおける先頭index, 存在しない場合は-1を返す
  int find(string T) {
    int l = 0, r = N;
    while (r - l > 1) {
      cout << l << endl;
      int mid = (l + r) / 2;
      if (S.compare(sorted[mid], T.size(), T) < 0) {
        l = mid;
      } else {
        r = mid;
      }
    }
    if (S.compare(sorted[l], T.length(), T) != 0) { return -1; }
    return sorted[l];
  }
};

signed main() {
  int K;
  string S;
  cin >> K >> S;
  int N = S.size();
  int part = N / (K + 1);
  int rest = N % (K + 1);
  SuffixArray sf(S);
  if (rest == 0) {
    int ans = 0;
    REP (i, K + 1) {
      if (sf.rank[ans] > sf.rank[part * i]) {
        ans = part * i;
      }
    }
    cout << S.substr(ans, part) << endl;
    return 0;
  }
  int l = -1, r = N - 1;
  while (r - l > 1) {
    int mid = (r + l) / 2;
    int next = 0;
    int adi = 0;
    REP (i, K + 1) {
      if (sf.rank[next] <= sf.rank[sf.sorted[mid]]) {
        next += part + 1;
        adi++;
      } else {
        next += part;
      }
    }
    if (adi >= rest) {
      r = mid;
    } else {
      l = mid;
    }
  }
  cout << S.substr(sf.sorted[r], part + 1) << endl;
}

Submission Info

Submission Time
Task B - Problem where Commas Separate Digits
User knshnb
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2473 Byte
Status WA
Exec Time 209 ms
Memory 2928 KB

Judge Result

Set Name Sample Dataset1 Dataset2 Dataset3 Dataset4 Dataset5
Score / Max Score 0 / 0 0 / 100 0 / 100 0 / 200 0 / 200 0 / 400
Status
AC × 3
AC × 13
WA × 4
AC × 20
WA × 12
AC × 32
WA × 17
AC × 42
WA × 22
AC × 52
WA × 27
Set Name Test Cases
Sample subtask_02_ex1.txt, subtask_03_ex2.txt, subtask_03_ex3.txt
Dataset1 subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt
Dataset2 subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_02_01.txt, subtask_02_02.txt, subtask_02_03.txt, subtask_02_04.txt, subtask_02_05.txt, subtask_02_06.txt, subtask_02_07.txt, subtask_02_08.txt, subtask_02_09.txt, subtask_02_10.txt, subtask_02_11.txt, subtask_02_12.txt, subtask_02_13.txt, subtask_02_14.txt, subtask_02_ex1.txt
Dataset3 subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_02_01.txt, subtask_02_02.txt, subtask_02_03.txt, subtask_02_04.txt, subtask_02_05.txt, subtask_02_06.txt, subtask_02_07.txt, subtask_02_08.txt, subtask_02_09.txt, subtask_02_10.txt, subtask_02_11.txt, subtask_02_12.txt, subtask_02_13.txt, subtask_02_14.txt, subtask_02_ex1.txt, subtask_03_01.txt, subtask_03_02.txt, subtask_03_03.txt, subtask_03_04.txt, subtask_03_05.txt, subtask_03_06.txt, subtask_03_07.txt, subtask_03_08.txt, subtask_03_09.txt, subtask_03_10.txt, subtask_03_11.txt, subtask_03_12.txt, subtask_03_13.txt, subtask_03_14.txt, subtask_03_15.txt, subtask_03_ex2.txt, subtask_03_ex3.txt
Dataset4 subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_02_01.txt, subtask_02_02.txt, subtask_02_03.txt, subtask_02_04.txt, subtask_02_05.txt, subtask_02_06.txt, subtask_02_07.txt, subtask_02_08.txt, subtask_02_09.txt, subtask_02_10.txt, subtask_02_11.txt, subtask_02_12.txt, subtask_02_13.txt, subtask_02_14.txt, subtask_02_ex1.txt, subtask_03_01.txt, subtask_03_02.txt, subtask_03_03.txt, subtask_03_04.txt, subtask_03_05.txt, subtask_03_06.txt, subtask_03_07.txt, subtask_03_08.txt, subtask_03_09.txt, subtask_03_10.txt, subtask_03_11.txt, subtask_03_12.txt, subtask_03_13.txt, subtask_03_14.txt, subtask_03_15.txt, subtask_03_ex2.txt, subtask_03_ex3.txt, subtask_04_01.txt, subtask_04_02.txt, subtask_04_03.txt, subtask_04_04.txt, subtask_04_05.txt, subtask_04_06.txt, subtask_04_07.txt, subtask_04_08.txt, subtask_04_09.txt, subtask_04_10.txt, subtask_04_11.txt, subtask_04_12.txt, subtask_04_13.txt, subtask_04_14.txt, subtask_04_15.txt
Dataset5 subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_02_01.txt, subtask_02_02.txt, subtask_02_03.txt, subtask_02_04.txt, subtask_02_05.txt, subtask_02_06.txt, subtask_02_07.txt, subtask_02_08.txt, subtask_02_09.txt, subtask_02_10.txt, subtask_02_11.txt, subtask_02_12.txt, subtask_02_13.txt, subtask_02_14.txt, subtask_02_ex1.txt, subtask_03_01.txt, subtask_03_02.txt, subtask_03_03.txt, subtask_03_04.txt, subtask_03_05.txt, subtask_03_06.txt, subtask_03_07.txt, subtask_03_08.txt, subtask_03_09.txt, subtask_03_10.txt, subtask_03_11.txt, subtask_03_12.txt, subtask_03_13.txt, subtask_03_14.txt, subtask_03_15.txt, subtask_03_ex2.txt, subtask_03_ex3.txt, subtask_04_01.txt, subtask_04_02.txt, subtask_04_03.txt, subtask_04_04.txt, subtask_04_05.txt, subtask_04_06.txt, subtask_04_07.txt, subtask_04_08.txt, subtask_04_09.txt, subtask_04_10.txt, subtask_04_11.txt, subtask_04_12.txt, subtask_04_13.txt, subtask_04_14.txt, subtask_04_15.txt, subtask_05_01.txt, subtask_05_02.txt, subtask_05_03.txt, subtask_05_04.txt, subtask_05_05.txt, subtask_05_06.txt, subtask_05_07.txt, subtask_05_08.txt, subtask_05_09.txt, subtask_05_10.txt, subtask_05_11.txt, subtask_05_12.txt, subtask_05_13.txt, subtask_05_14.txt, subtask_05_15.txt
Case Name Status Exec Time Memory
subtask_01_01.txt AC 1 ms 256 KB
subtask_01_02.txt AC 1 ms 256 KB
subtask_01_03.txt WA 1 ms 256 KB
subtask_01_04.txt AC 1 ms 256 KB
subtask_01_05.txt AC 1 ms 256 KB
subtask_01_06.txt AC 1 ms 256 KB
subtask_01_07.txt AC 1 ms 256 KB
subtask_01_08.txt WA 1 ms 256 KB
subtask_01_09.txt AC 1 ms 256 KB
subtask_01_10.txt AC 1 ms 256 KB
subtask_01_11.txt AC 1 ms 256 KB
subtask_01_12.txt AC 1 ms 256 KB
subtask_01_13.txt WA 1 ms 256 KB
subtask_01_14.txt AC 1 ms 256 KB
subtask_01_15.txt WA 1 ms 256 KB
subtask_01_16.txt AC 1 ms 256 KB
subtask_01_17.txt AC 1 ms 256 KB
subtask_02_01.txt WA 1 ms 256 KB
subtask_02_02.txt AC 1 ms 256 KB
subtask_02_03.txt WA 1 ms 256 KB
subtask_02_04.txt WA 1 ms 256 KB
subtask_02_05.txt AC 1 ms 256 KB
subtask_02_06.txt WA 1 ms 256 KB
subtask_02_07.txt WA 1 ms 256 KB
subtask_02_08.txt WA 1 ms 256 KB
subtask_02_09.txt AC 1 ms 256 KB
subtask_02_10.txt AC 1 ms 256 KB
subtask_02_11.txt AC 1 ms 256 KB
subtask_02_12.txt AC 1 ms 256 KB
subtask_02_13.txt WA 1 ms 256 KB
subtask_02_14.txt WA 1 ms 256 KB
subtask_02_ex1.txt AC 1 ms 256 KB
subtask_03_01.txt AC 1 ms 256 KB
subtask_03_02.txt AC 1 ms 256 KB
subtask_03_03.txt WA 1 ms 256 KB
subtask_03_04.txt WA 1 ms 256 KB
subtask_03_05.txt AC 1 ms 256 KB
subtask_03_06.txt WA 1 ms 256 KB
subtask_03_07.txt WA 1 ms 256 KB
subtask_03_08.txt WA 1 ms 256 KB
subtask_03_09.txt AC 1 ms 256 KB
subtask_03_10.txt AC 1 ms 256 KB
subtask_03_11.txt AC 1 ms 256 KB
subtask_03_12.txt AC 1 ms 256 KB
subtask_03_13.txt AC 1 ms 256 KB
subtask_03_14.txt AC 1 ms 256 KB
subtask_03_15.txt AC 1 ms 256 KB
subtask_03_ex2.txt AC 1 ms 256 KB
subtask_03_ex3.txt AC 1 ms 256 KB
subtask_04_01.txt AC 3 ms 256 KB
subtask_04_02.txt AC 3 ms 256 KB
subtask_04_03.txt WA 3 ms 256 KB
subtask_04_04.txt WA 3 ms 256 KB
subtask_04_05.txt AC 3 ms 256 KB
subtask_04_06.txt WA 3 ms 256 KB
subtask_04_07.txt WA 3 ms 256 KB
subtask_04_08.txt WA 3 ms 256 KB
subtask_04_09.txt AC 3 ms 256 KB
subtask_04_10.txt AC 3 ms 256 KB
subtask_04_11.txt AC 3 ms 256 KB
subtask_04_12.txt AC 3 ms 256 KB
subtask_04_13.txt AC 2 ms 256 KB
subtask_04_14.txt AC 1 ms 256 KB
subtask_04_15.txt AC 2 ms 256 KB
subtask_05_01.txt AC 207 ms 2816 KB
subtask_05_02.txt AC 209 ms 2816 KB
subtask_05_03.txt WA 206 ms 2816 KB
subtask_05_04.txt WA 206 ms 2816 KB
subtask_05_05.txt AC 206 ms 2816 KB
subtask_05_06.txt WA 206 ms 2816 KB
subtask_05_07.txt WA 205 ms 2816 KB
subtask_05_08.txt WA 206 ms 2928 KB
subtask_05_09.txt AC 205 ms 2928 KB
subtask_05_10.txt AC 206 ms 2816 KB
subtask_05_11.txt AC 165 ms 2816 KB
subtask_05_12.txt AC 165 ms 2816 KB
subtask_05_13.txt AC 148 ms 2228 KB
subtask_05_14.txt AC 191 ms 2688 KB
subtask_05_15.txt AC 74 ms 1340 KB