PALIN - The Next Palindrome

A positive integer is called a palindrome if its representation in the decimal system is the same when read from left to right and from right to left. For a given positive integer K of not more than 1000000 digits, write the value of the smallest palindrome larger than K to output. Numbers are always displayed without leading zeros.


The first line contains integer t, the number of test cases. Integers K are given in the next t lines.


For each K, output the smallest palindrome larger than K.




Warning: large Input/Output data, be careful with certain languages

hide comments
Ilya: 2014-01-15 15:17:31

How large can the number of inputs (t) be?

Hermano: 2014-01-15 15:17:31

I didn't read the problem carrefully. I thought it'd be 1 000 000 the max k value. But not... k can have almos 10^1000000 digits.

I can't make a code to execute the mirror thing fast enough. My code must increment a giant string representation of a integer, and compare theses represetations. And I keep getting tle. :/

Irving AJ Rivas: 2014-01-15 15:17:31

Adhityaa: there are faster solutions. Yours works, but is pretty slow. Keep working on it.

Last edit: 2011-10-27 15:26:15
Sotirios Nikoloutsopoulos: 2014-01-15 15:17:31

I got AC on this problem , even if my code failed at some test cases at even numbers ( now my code is corrected :) ).

Let's consider the case
Input :

Wrong output :

Wright output :

Shouldn't such test cases be included?

hendrik: 2014-01-15 15:17:31

@manish: Write a brute force function and calc all results from 0..10000 or so. Then compare that against your algo you need for that task. I got AC at the first shot with that approach.

genesect: 2014-01-15 15:17:31

@Hadyan: status codes explained here:

@Stefan: test cases contain no leading zeros, disregard that case

Ricky Suryadharma: 2014-01-15 15:17:31

Not wondering again... :D
Just AC in Java.
The main problem, just I though, how to read/write I/O (not the algorithm).
Try to read byte by byte and write byte by byte (don't use Scanner class and System.out.println, they will slow program).

Hey, after I saw the status, my Java program runs faster than my C++ program (even I use the same algorithm).. LOL.. my first time experience XD

Ricky Suryadharma: 2014-01-15 15:17:31

Same here..
Firstly, I wrote in Java and always got TLE, even tried to read the input byte by byte (using the fastest method I've known).
After transform my code to C++, without changing the algorithm, I got AC.
Wondering... :|

@Burak Yılmazt├╝rk:
Running time can be reduced by analyze and design the better algorithm, optimize the code (compiler or programming language manual or API may be such a help), choose another programming language like I did.
See for TLE.

May be you should try the worst testcase (1000000 digits) by generate the input (search I/O pipe reference for more info).
Or you may try to generate the input for all 1000 first positive integers and see manually whether the output right or not.

@Wojciech Pietrzak:
I'm not familiar with that programming language. May be you should try the worst testcase.

An Yujie: 2014-01-15 15:17:31

Coders, attention. SIGSEGV means your array is not big enough. I got SIGSEGV by x[100000], but when I changed it to x[1000000], I got AC. It means that the biggest number may have 1000000 digits...

Last edit: 2010-07-02 13:12:06
Jargon: 2014-01-15 15:17:31

It's up to 1 million digits -- try reading the comments below yours to see if the question has been answered before.
This is a string problem, not a number problem.

Added by:adrian
Time limit:2s-9s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6

Problem's scores 1 vote

Concept difficulty
Concept difficulty 37%
Implementation difficulty
Implementation difficulty 50%
456 15