| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 3546 | pl0892029 | Make superpalindrome! (kriii1_M) | C++98 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<stdio.h>
#include<string.h>
char* strRev(char str[]);
bool isOK(char str[]);
bool isP(char str[]);
#define MAX_SIZE 100000
void main(){
char input[MAX_SIZE];
scanf("%s", input);
while(true){
if(isOK(input)) break;
int plusIndex=strlen(input)-1;
while(plusIndex>=0){
if(input[plusIndex]=='z')
plusIndex--;
else break;
}
input[plusIndex]++;
for(int i=plusIndex+1; i<strlen(input); i++)
input[i]='a';
}
printf("%s",input);
while(true);
}
bool isOK(char str[]){
char left[MAX_SIZE/2], right[MAX_SIZE/2];
int i;
for(i=0; i<strlen(str)/2; i++){
left[i]=str[i];
}
left[i]=NULL;
if(strlen(str)%2==0){
for(i=strlen(str)/2; i<strlen(str); i++){
right[i-strlen(str)/2]=str[i];
}
right[strlen(str)/2]=NULL;
}
else{
for(i=strlen(str)/2+1; i<strlen(str); i++){
right[i-strlen(str)/2-1]=str[i];
}
right[strlen(str)/2]=NULL;
}
if(strlen(str)==1)
return true;
else if(!isP(str))
return false;
else{
return isOK(left) && isOK(right);
}
}
char* strRev(char str[]){
int i;
int length=strlen(str);
char result[MAX_SIZE];
for( i=0; i<length; i++){
result[i]=str[length-i-1];
}
result[i]=NULL;
return result;
}
bool isP(char str[]){
char *revert;
revert=strRev(str);
if(strcmp(str,revert)==0)
return true;
else{
return false;
}
}
