Submission #11108

#TimeUsernameProblemLanguageResultExecution timeMemory
11108gs14004Three Friends (BOI14_friends)C++98
0 / 100
8 ms5968 KiB
#include <cstdio>
#include <cstdlib>

int n,res = -1;
char str[2000005];

void upload(int x){
    if(~res){
        puts("NOT UNIQUE");
        exit(0);
    }
    res = x;
}

void output(){
    if(res == -1) puts("NOT POSSIBLE");
    else{
        int p = 0;
        for (int i=0; i<n/2+p; i++) {
            if(i == res){
                p++;
                continue;
            }
            putchar(str[i]);
        }
    }
}

void calc_m(){
    for (int i=0; i<n/2; i++) {
        if(str[i] != str[i+n/2+1]) return;
    }
    res = n/2;
}

char s1[1000004], s2[1000004], diff[1000004], cnt;

void calc_l(){
    cnt = 0;
    for (int i=0; i<n/2; i++) {
        s1[i] = str[i];
        s2[i] = str[i+n/2+1];
        diff[i] = (s1[i] != s2[i]);
        cnt += diff[i];
    }
    for (int i=n/2-1; i>=0; i--) {
        s1[i] = str[i+1];
        if(s1[i] == s2[i] && diff[i]){
            diff[i] = 0;
            cnt--;
        }
        if(s1[i] != s2[i] && !diff[i]){
            diff[i] = 1;
            cnt++;
        }
        if(cnt == 0) upload(i);
    }
}

void calc_r(){
    cnt = 0;
    for (int i=0; i<n/2; i++) {
        s1[i] = str[i];
        s2[i] = str[i+n/2+1];
        diff[i] = (s1[i] != s2[i]);
        cnt += diff[i];
    }
    for (int i=n/2+1; i<n; i++) {
        s2[i-n/2-1] = str[i-1];
        if(s1[i-n/2-1] == s2[i-n/2-1] && diff[i-n/2-1]){
            diff[i-n/2-1] = 0;
            cnt--;
        }
        if(s1[i-n/2-1] != s2[i-n/2-1] && !diff[i-n/2-1]){
            diff[i-n/2-1] = 1;
            cnt++;
        }
        if(cnt == 0) upload(i);
    }
}

int main(){
    scanf("%d %s",&n,str);
    if(!(n&1)){
        puts("NOT POSSIBLE");
        exit(0);
    }
    calc_m();
    calc_l();
    calc_r();
    output();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...