This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define INF INT_MAX
#define output for(int i=0;i<sizex;i++) { for(int j=0;j<sizey;j++) { cout << moveChart[i][j] << " "; }cout<<endl; }cout<<endl;
const int maxN = 2000001;
int dp[maxN][4]; // 0 noPluses 1 addLeft 2 addRight 3 addBoth
int bt[maxN][4];
int N;
string s;
int f( int idx, int mod ){
int L = idx, R = idx+(N-1)/2;
if( mod == 1 ) L++;
else if( mod == 2 ) R++;
else if( mod == 3 ) { L++; R++; }
// cout << idx << " " << mod << " " << s[L] << " " << s[R] << endl;
if( R == N && mod == 3 ) return 1;
if( R == N ) return 0;
if( dp[idx][mod] != -1 ) return dp[idx][mod];
int res = 0;
if( s[L] == s[R] ) { res += f( idx+1, mod );
if( f( idx+1, mod ) == 1 ) bt[idx][mod] = 0;
}
if( mod == 3 ) res += 0; // not possible from here bro sorry
if( mod == 2 ) { res += f( idx, 3 );
if( f( idx, 3 ) == 1 ) bt[idx][mod] = 3;
}
if( mod == 1 ) {res += f( idx, 3 );
if( f( idx, 3 ) == 1 ) bt[idx][mod] = 3;
}
if( mod == 0 ) { res += f( idx, 1 ) | f( idx, 2 );
if( f( idx, 1 ) == 1 ) bt[idx][mod] = 1;
if( f( idx, 2 ) == 1 ) bt[idx][mod] = 2;
}
return dp[idx][mod] = res;
}
int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> N >> s;
if( !( N & 1 ) ){
cout << "NOT POSSIBLE" << endl; return 0;
}
memset( dp, -1, sizeof dp );
memset( bt, -1, sizeof bt );
int res = f( 0, 0 );
// cout << res << endl;
// return 0;
if( res == 0 ) cout << "NOT POSSIBLE" << endl;
else if( res > 1 ) cout << "NOT UNIQUE" << endl;
else{
string out = "";
int idx = 0, mod = 0;
while( bt[idx][mod] != -1 ){
int L = idx, R = idx+(N-1)/2;
if( mod == 1 ) L++;
else if( mod == 2 ) R++;
else if( mod == 3 ) { L++; R++; }
if( bt[idx][mod] == 0 ){
out += s[L];
idx++;
}else if( bt[idx][mod] == 1 ){
mod = 1;
}else if( bt[idx][mod] == 2 ){
mod = 2;
}else if( bt[idx][mod] == 3 ){
mod = 3;
}else{
cout << "WTF" << endl;
}
}
cout << out << endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |