# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
13862 | baneling100 | Make superpalindrome! (kriii1_M) | C++98 | 0 ms | 1196 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
#include <string.h>
#define L_MAX 100000
int L;
char S[L_MAX+1];
int makePalin(int left, int right) {
int num, mid=(left+right)/2, k, t;
if(left<right) {
if((right-left)%2) {
k=makePalin(left,mid);
if(k) {
strncpy(S+mid+1,S+left,mid-left+1);
return 1;
}
else {
num=strncmp(S+left,S+mid+1,mid-left+1);
if(num>0) {
strncpy(S+mid+1,S+left,mid-left+1);
return 1;
}
else if(num<0) {
t=mid;
while(S[t]=='z') S[t--]='a';
S[t]++;
k=makePalin(left,mid);
strncpy(S+mid+1,S+left,mid-left+1);
return 1;
}
else return 0;
}
}
else {
k=makePalin(left,mid-1);
if(k) {
S[mid]='a';
strncpy(S+mid+1,S+left,mid-left);
return 1;
}
else {
num=strncmp(S+left,S+mid+1,mid-left);
if(num>0) {
strncpy(S+mid+1,S+left,mid-left);
return 1;
}
else if(num<0) {
if(S[mid]=='z') {
t=mid-1;
while(S[t]=='z') S[t--]='a';
S[t]++;
makePalin(left,mid-1);
S[mid]='a';
strncpy(S+mid+1,S+left,mid-left);
}
else {
S[mid]++;
strncpy(S+mid+1,S+left,mid-left);
}
return 1;
}
else return 0;
}
}
}
}
int main(void) {
int temp, t;
scanf("%s",S);
L=strlen(S);
t=L-1;
while(S[t]=='z') S[t--]='a';
S[t]++;
temp=makePalin(0,L-1);
printf("%s",S);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |