제출 #1357922

#제출 시각아이디문제언어결과실행 시간메모리
1357922kutomei3세 명의 친구들 (BOI14_friends)C++20
100 / 100
17 ms17412 KiB
#include <bits/stdc++.h>
using namespace std;

set<string> an; 
string ans;
bool check(string &s, int pos, int n)
{
    string ns;
    for (int i = 0; i < n; i++) {
        if (i != pos) ns += s[i];
    }
    //cout << ns << '\n';
    bool c = true;
    for (int i = 0; i < n / 2; i++) {
        if (ns[i] != ns[i + n / 2]) c = false; 
    }
    if (c) {
        string t;
        for (int i = 0; i < n / 2; i++) {
            t += ns[i];
        }
        ans = t;
    }
    return c;
}

int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    string s;
    cin >> s;

    if (!(n & 1)) {
        cout << "NOT POSSIBLE";
        return 0;
    }

    // int sl = n / 2;
    // int ct = 0;
    // for (int i = 0; i < n; i++) {
    //     if (check(s, i, n)) an.insert(ans);
    // }

    vector<int> suf(n / 2 + 2, 1);
    for (int i = n / 2; i >= 0; i--) {
        //cout << s[i] << ' ' << s[i + n / 2] << '\n';
        if (s[i] != s[i + n / 2]) suf[i] = 0;
        if (!suf[i + 1]) suf[i] = 0;
    }

    string ans;
    string r;
    for (int j = n / 2 + 1; j < n; j++) r += s[j]; 
    for (int i = 0; i <= n / 2; i++) {
        //cout << s[i] << ' ' << suf[i + 1] << '\n';
        if (suf[i + 1]) {
            an.insert(r);
            break;
        } 
        if (s[i] != s[i + n / 2 + 1]) break;
        ans += s[i];
    }

    reverse(s.begin(), s.end());

    vector<int> suf2(n / 2 + 2, 1);
    for (int i = n / 2; i >= 0; i--) {
        //cout << s[i] << ' ' << s[i + n / 2] << '\n';
        if (s[i] != s[i + n / 2]) suf2[i] = 0;
        if (!suf2[i + 1]) suf2[i] = 0;
    }

    string r2;
    string ans2;

    for (int j = n - 1; j >= n / 2 + 1; j--) r2 += s[j]; 
    for (int i = 0; i <= n / 2; i++) {
        //cout << s[i] << ' ' << suf[i + 1] << '\n';
        if (suf2[i + 1]) {
            an.insert(r2);
            break;
        } 
        if (s[i] != s[i + n / 2 + 1]) break;
        ans2 += s[i];
    }

    if (an.size() >= 2) cout << "NOT UNIQUE";
    else if (an.size() == 0) cout << "NOT POSSIBLE";
    else cout << *an.begin();

    return 0;
}

/*
7
ABCAXBC
1..|1..
abcdefg
ABXCABC
0123456

vector<int> suf(n / 2 + 1, true);
for (int i = n / 2; i >= 0; i--) {
    if (suf[i] != suf[i + n / 2]) suf[i] = false;
    suf[i] |= suf[i + 1];
}

*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…