1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ''' Created on 17-Jul-2011 @author: Naresh ''' def nextPalindrome1(pal): length = len(pal) if (length & 1 == 0): if length == 0: return pal half = length >> 1 if (needsIncrement(pal, half -1, half, length)): return increment(pal, half -1, half, length) else: return pal[0:half-1] + pal[half-1]*2 +(pal[0:half-1])[::-1] else: if length == 1: if (pal == "9"): return (11) else: return int(pal) + 1 half = length >> 1 if (needsIncrement(pal, half, half, length)): return increment(pal, half, half, length) else: return pal[0:half] + pal[half] +(pal[0:half])[::-1] def increment(pal, i, j, length): if (length & 1 == 0): temp = pal[0:i] + pal[i]*2 +(pal[0:i])[::-1] else: temp = pal[0:i] + pal[i] +(pal[0:i])[::-1] intPal = int(pal) while (int(temp) <= intPal): index = i while(index >= 0): if (temp[index] != "9"): break; index -= 1 if (index == -1): temp = "1" + ("0" * (j)) + temp[j:length] else: temp = temp[0:index] + `int(temp[index]) + 1` + (i - index)*"0" + temp[i+1:length] length = len(temp) half = length >> 1 if (length & 1 == 0): temp = temp[0:half-1] + temp[half-1]*2 +(temp[0:half-1])[::-1] else: temp = temp[0:half] + temp[half] +(temp[0:half])[::-1] return temp def needsIncrement(pal, i, j, length): tempI = i tempJ = j while (i >= 0 and j < length): if (pal[i] < pal[j]): return True i-=1 j+=1 while (tempI >= 0 and tempJ < length): if (pal[tempI] != pal[tempJ]): return False tempI -= 1 tempJ +=1 if (tempI == -1 and tempJ == length): return True return False import sys import gc import psyco if __name__ == '__main__': strip = str.strip gc.disable() psyco.full() data = sys.stdin.readlines() for i in range(1, len(data)): input = strip(data[i]) length = len(input) j = 0 while (j < length): if (input[j] != '0'): break else: j+=1 str = input[j:length] if (len(str) == 0 and len(input) > 0): print "1" else: print nextPalindrome1(str) |
JycnCkNyZWF0ZWQgb24gMTctSnVsLTIwMTEKCkBhdXRob3I6IE5hcmVzaAonJycKCmRlZiBuZXh0UGFsaW5kcm9tZTEocGFsKToKICAgIGxlbmd0aCA9IGxlbihwYWwpCiAgICBpZiAobGVuZ3RoICYgMSA9PSAwKToKICAgICAgICBpZiBsZW5ndGggPT0gMDoKICAgICAgICAgICAgcmV0dXJuIHBhbAogICAgICAgIGhhbGYgPSBsZW5ndGggPj4gMSAKICAgICAgICBpZiAobmVlZHNJbmNyZW1lbnQocGFsLCBoYWxmIC0xLCBoYWxmLCBsZW5ndGgpKToKICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudChwYWwsIGhhbGYgLTEsIGhhbGYsIGxlbmd0aCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gcGFsWzA6aGFsZi0xXSArIHBhbFtoYWxmLTFdKjIgKyhwYWxbMDpoYWxmLTFdKVs6Oi0xXQogICAgZWxzZToKICAgICAgICBpZiBsZW5ndGggPT0gMToKICAgICAgICAgICAgaWYgKHBhbCA9PSAiOSIpOgogICAgICAgICAgICAgICAgcmV0dXJuICgxMSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBpbnQocGFsKSArIDEKICAgICAgICBoYWxmID0gbGVuZ3RoID4+IDEKICAgICAgICBpZiAobmVlZHNJbmNyZW1lbnQocGFsLCBoYWxmLCBoYWxmLCBsZW5ndGgpKToKICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudChwYWwsIGhhbGYsIGhhbGYsIGxlbmd0aCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gcGFsWzA6aGFsZl0gKyBwYWxbaGFsZl0gKyhwYWxbMDpoYWxmXSlbOjotMV0KICAgIApkZWYgaW5jcmVtZW50KHBhbCwgaSwgaiwgbGVuZ3RoKToKICAgIGlmIChsZW5ndGggJiAxID09IDApOgogICAgICAgIHRlbXAgPSBwYWxbMDppXSArIHBhbFtpXSoyICsocGFsWzA6aV0pWzo6LTFdCiAgICBlbHNlOgogICAgICAgIHRlbXAgPSBwYWxbMDppXSArIHBhbFtpXSArKHBhbFswOmldKVs6Oi0xXQogICAgaW50UGFsID0gaW50KHBhbCkKICAgIHdoaWxlIChpbnQodGVtcCkgPD0gaW50UGFsKToKICAgICAgICBpbmRleCA9IGkKICAgICAgICB3aGlsZShpbmRleCA+PSAwKToKICAgICAgICAgICAgaWYgKHRlbXBbaW5kZXhdICE9ICI5Iik6CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgaW5kZXggLT0gMQogICAgICAgIGlmIChpbmRleCA9PSAtMSk6CiAgICAgICAgICAgIHRlbXAgPSAiMSIgKyAoIjAiICogKGopKSArIHRlbXBbajpsZW5ndGhdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdGVtcCA9IHRlbXBbMDppbmRleF0gKyBgaW50KHRlbXBbaW5kZXhdKSArIDFgICsgKGkgLSBpbmRleCkqIjAiICsgdGVtcFtpKzE6bGVuZ3RoXQogICAgICAgIGxlbmd0aCA9IGxlbih0ZW1wKQogICAgICAgIGhhbGYgPSBsZW5ndGggPj4gMQogICAgICAgIGlmIChsZW5ndGggJiAxID09IDApOgogICAgICAgICAgICB0ZW1wID0gdGVtcFswOmhhbGYtMV0gKyB0ZW1wW2hhbGYtMV0qMiArKHRlbXBbMDpoYWxmLTFdKVs6Oi0xXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRlbXAgPSB0ZW1wWzA6aGFsZl0gKyB0ZW1wW2hhbGZdICsodGVtcFswOmhhbGZdKVs6Oi0xXQogICAgcmV0dXJuIHRlbXAKCmRlZiBuZWVkc0luY3JlbWVudChwYWwsIGksIGosIGxlbmd0aCk6CiAgICB0ZW1wSSA9IGkKICAgIHRlbXBKID0gagogICAgCiAgICB3aGlsZSAoaSA+PSAwIGFuZCBqIDwgbGVuZ3RoKToKICAgICAgICBpZiAocGFsW2ldIDwgcGFsW2pdKToKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBpLT0xCiAgICAgICAgais9MQoKICAgIHdoaWxlICh0ZW1wSSA+PSAwIGFuZCB0ZW1wSiA8IGxlbmd0aCk6CiAgICAgICAgaWYgKHBhbFt0ZW1wSV0gIT0gcGFsW3RlbXBKXSk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIHRlbXBJIC09IDEKICAgICAgICB0ZW1wSiArPTEKICAgICAgICAKICAgIGlmICh0ZW1wSSA9PSAtMSBhbmQgdGVtcEogPT0gbGVuZ3RoKToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCmltcG9ydCBzeXMKaW1wb3J0IGdjCmltcG9ydCBwc3ljbwppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgc3RyaXAgPSBzdHIuc3RyaXAKICAgIGdjLmRpc2FibGUoKQogICAgcHN5Y28uZnVsbCgpCiAgICBkYXRhID0gc3lzLnN0ZGluLnJlYWRsaW5lcygpCiAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oZGF0YSkpOgogICAgICAgIGlucHV0ID0gc3RyaXAoZGF0YVtpXSkKICAgICAgICBsZW5ndGggPSBsZW4oaW5wdXQpCiAgICAgICAgaiA9IDAKICAgICAgICB3aGlsZSAoaiA8IGxlbmd0aCk6CiAgICAgICAgICAgIGlmIChpbnB1dFtqXSAhPSAnMCcpOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGorPTEKICAgICAgICBzdHIgPSBpbnB1dFtqOmxlbmd0aF0KICAgICAgICBpZiAobGVuKHN0cikgPT0gMCBhbmQgbGVuKGlucHV0KSA+IDApOgogICAgICAgICAgICBwcmludCAiMSIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCBuZXh0UGFsaW5kcm9tZTEoc3RyKQo=
-
upload with new input
-
result: Success time: 0.03s memory: 39800 kB returned value: 0
7414957893516039
-
result: Success time: 0.03s memory: 39800 kB returned value: 0



