# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
3800 | Apple_Cplus | Make superpalindrome! (kriii1_M) | C++98 | 8 ms | 2552 KiB |
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 <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;
#define ll long long
#define pi pair<int,int>
#define pll pair<ll,ll>
#define pii pair<int,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int>
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}
char a[100005];
int n;
string A;
void UP(string &A){
int n=A.size();
int s,e;
s=n/2;e=n/2;
if(A.size()%2==0)e++;
A[s]++;
for(s;s>=0;s--,e++){
if(A[s]>'z'){
A[s]='a';
A[e]='a';
A[s-1]++;
A[e+1]++;
}else break;
}
}
int P[100005];
bool ck[100005];
int F(int x){
if(P[x]!=x)P[x]=F(P[x]);
return P[x];
}
void mer(int s,int e){
if(s>=e)return;
int L=(e-s+1);
int M=L/2;
int S=s,E=e;
while(S<=E){
P[F(E)]=F(S);
S++;E--;
}
if(L%2){
mer(s,s+M-1);
mer(s+M+1,e);
}
else{
mer(s,s+M-1);
mer(s+M,e);
}
}
vi v;
string now;
char st[100005];
bool go(int x,int same){
if(x==A.size())return 1;
int k=F(P[x]);
if(st[k]){
if(same && st[k]<A[x])return 0;
now[x]=st[k];
int nxt=0;
if(same && st[k]==A[x])nxt=1;
if(go(x+1,nxt))return 1;
}else{
char ss=A[x];
if(same==0)ss='a';
for(ss;ss<=A[x]+2;ss++){
int nxt=0;
st[k]=ss;
if(same && ss==A[x])nxt=1;
now[x]=ss;
if(go(x+1,nxt))return 1;
}
}
return 0;
}
int main(){
scanf("%s",&a);
A=a;
n=A.size();
now=A;
for(int i=0;i<n;i++)P[i]=i;
mer(0,n-1);
for(int i=0;i<n;i++){
int t=F( P[i] );
if(ck[t])continue;
ck[t]=1;
v.pb(t);
}
go(0,1);
cout<<now<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |