Submission #1173331

#TimeUsernameProblemLanguageResultExecution timeMemory
1173331DangKhoizzzzThree Friends (BOI14_friends)C++17
0 / 100
46 ms34664 KiB
#include <bits/stdc++.h>
#define int unsigned long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>

using namespace std;

const int INF = 1e18 + 7;
const int maxn = 2e6 + 7;
const int base = 31;
const int mod = 1e9 + 7;

int n;
char s[maxn];
int prehash[maxn] , prepow[maxn];

void build()
{
    prepow[0] = 1ll;
    for(int i = 1; i <= n; i++)
    {
        prehash[i] = (prehash[i-1]*base + (s[i] - 'A' + 1));
        prepow[i] = (prepow[i-1] * base);
    }
}

int get(int l , int r)
{
    return (prehash[r] - prehash[l-1]*prepow[r - l + 1]);
}

int merge_hash(int l1 , int r1  , int l , int r)
{
    return (get(l1 , r1)*prepow[r - l + 1] + get(l , r));
}

int cnt = 0;
pii ans;

void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> s[i];
    build();

    if(n%2 == 0) {cout << "NOT POSSIBLE" << '\n';return;}

    int mid = (n+1)/2;

    if(get(1 , mid-1) == get(mid+1 , n))
    {
        cnt = 1; ans = {1 , mid - 1};
    }
    if(get(2 , mid) == get(mid+1 , n))
    {
        if(cnt == 1) {cout << "NOT UNIQUE"; return;}
        cnt = 1; ans = {2 , mid};
    }
    if(get(1 , mid - 1) == get(mid , n-1))
    {
        if(cnt == 1) {cout << "NOT UNIQUE"; return;}
        cnt = 1; ans = {1 , mid - 1};
    }

    for(int del = 2; del < mid; del++)
    {
        if(merge_hash(1 , del - 1 , del + 1 , mid) == get(mid + 1 , n))
        {
            if(cnt == 1) {cout << "NOT UNIQUE"; return;}
            cnt = 1; ans = {mid+1 , n};
        }
    }
    for(int del = mid+1; del < n; del++)
    {
        if(get(1 , mid - 1) == merge_hash(mid , del - 1 , del + 1 , n))
        {
            if(cnt == 1) {cout << "NOT UNIQUE"; return;}
            cnt = 1; ans = {1 , mid - 1};
        }
    }

    if(cnt == 0) {cout << "NOT POSSIBLE" << '\n'; return;}

    for(int i = ans.fi; i <= ans.se; i++) cout << s[i];
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...