제출 #930679

#제출 시각아이디문제언어결과실행 시간메모리
930679MinhAnhnd세 명의 친구들 (BOI14_friends)C++14
100 / 100
110 ms37716 KiB
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define ll __int128
#define maxn 300001
#define INF 1000000001
#define pa pair<ll,ll>
#define vi(t) vector<t>

//long long T[1000002];
long SS[2000002];
long Left[2000002];
long Right[2000002];
int main(){
    long N;

    cin>>N;
    for(long i = 1;i<=N;i++){
        char temp;
        cin>>temp;
        SS[i] = (long)temp;
    }
    if (N%2==0) {
        cout<<"NOT POSSIBLE";
        return 0;
    }
    long j = N/2 + 1;
    long used = 0;
    for (long i = 1;i<=N/2;i++){
        Left[i] = SS[i];
        while(SS[i]!=SS[j]){
            j++;
            used++;
            if (used==2){
                Left[0] = 1;
                break;
            }
        }
        if (used==2){
            Left[0] = 1;
            break;
        }
        j++;
    }
    //cout<<used;
    j = 1;
    used = 0;
    for (long i = 1;i<=N/2;i++){
        Right[i] = SS[i+N/2+1];
        while(SS[i+N/2+1]!=SS[j]){
            j++;
            used++;
            if (used==2){
                Right[0] = 2;
                break;
            }
        }
        if (used==2){
            Right[0] = 2;
            break;
        }
        j++;
    }

    if (Right[0]==2 && Left[0]==1){
        cout<<"NOT POSSIBLE";
        return 0 ;
    }
    if (Right[0]==2){
        for (long i = 1;i<=N/2;i++) cout<<(char)Left[i];
        return 0;
    }
    if (Left[0]==1){
        for (long i = 1;i<=N/2;i++) cout<<(char)Right[i];
        return 0;
    }
    for (long i = 1;i<=N/2;i++) if (Left[i]!=Right[i]){
        cout<<"NOT UNIQUE";
        return 0;
    }
    for (long i = 1;i<=N/2;i++) cout<<(char)Right[i];
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...