Submission #1269377

#TimeUsernameProblemLanguageResultExecution timeMemory
1269377rtriThree Friends (BOI14_friends)C++20
100 / 100
53 ms13196 KiB
#include <bits/stdc++.h>
using namespace std;

int n;
string u;
int letter = -1;

string run(bool in_a) {
  int astart = 0;
  int bstart = n / 2;
  if (in_a)
    bstart++;

  int alen = 0, blen = 0;
  int aoff = 0, boff = 0;
  string sol = "";
  while (alen < n / 2 && blen < n / 2) {
    char alet = u[astart + alen + aoff];
    char blet = u[bstart + blen + boff];
    if (alet != blet) {
      if (0 < aoff + boff)
        return "";
      if (alet == letter && in_a) {
        aoff++;
        continue;
      } else if (blet == letter && !in_a) {
        boff++;
        continue;
      } else {
        return "";
      }
    }

    sol.push_back(alet);
    alen++;
    blen++;
  }

  return sol;
}

int main() {
  cin >> n >> u;

  vector<int> CNT(26);
  for (int c : u)
    CNT[c - 'A']++;

  for (int i = 0; i < CNT.size(); i++) {
    if (CNT[i] % 2 == 1) {
      if (letter == -1) {
        letter = i;
      } else {
        cout << "NOT POSSIBLE" << endl;
        return 0;
      }
    }
  }

  if (letter == -1) {
    cout << "NOT POSSIBLE" << endl;
    return 0;
  }

  letter += 'A';

  auto sol1 = run(false);
  auto sol2 = run(true);
  reverse(u.begin(), u.end());
  auto sol4 = run(false);
  auto sol3 = run(true);
  reverse(sol3.begin(), sol3.end());
  reverse(sol4.begin(), sol4.end());

  cerr << "SOL1 " << sol1 << " " << sol1.size() << endl;
  cerr << "SOL2 " << sol2 << " " << sol2.size() << endl;
  cerr << "SOL3 " << sol3 << " " << sol3.size() << endl;
  cerr << "SOL4 " << sol4 << " " << sol4.size() << endl;

  if (sol1 == "" && sol2 == "" && sol3 == "" && sol4 == "")
    cout << "NOT POSSIBLE" << endl;
  else if (sol1 == sol3 && sol2 == "" && sol4 == "")
    cout << sol1 << endl;
  else if (sol2 == sol4 && sol1 == "" && sol3 == "")
    cout << sol2 << endl;
  else if (sol1 == sol2 && sol2 == sol3 && sol3 == sol4)
    cout << sol2 << endl;
  else
    cout << "NOT UNIQUE" << endl;

  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...