# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
3815 | Qwaz | Make superpalindrome! (kriii1_M) | C++98 | 0 ms | 1672 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <algorithm>
const int MAX=100020;
char data[MAX];
int len;
void calcLength(){
while(data[len])
len++;
}
int where[MAX];
void process(int s, int e){
if(s >= e) return;
int m = (e+s)>>1;
if((e-s)%2){
where[m] = e-s;
process(s, m);
process(m+1, e);
} else {
process(s, s+(e-s)/2);
process(s+(e-s)/2, e);
}
}
char min[MAX];
int pos;
void solve(){
int i;
for(i=0; i<len; i++){
if(min[where[i]] == 0){
min[where[i]] = data[i];
if(data[i] != 'z')
pos = i;
} else {
if(min[where[i]] < data[i])
break;
else if(min[where[i]] > data[i]){
pos = i;
min[where[i]]--;
break;
}
}
}
min[where[pos]]++;
for(i=0; i<len; i++){
if(where[i]/2 > pos)
putchar('a');
else
putchar(min[where[i]]);
}
puts("");
}
int main(){
scanf("%s", data);
calcLength();
process(0, len);
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |