SRM330 div2 hard

久しぶりにパズル的な問題が出たので手も足も出なかった
(前半分   + 前半分をひっくり返したもの)もしくは
(前半分+1 + 前半分+1をひっくり返したもの)が答え

#include <algorithm>
#include <string>
#include <vector>

using namespace std;

class NextPalindromicNumber
{
	public:

		string getNext(string num)
		{
			int n=num.size();
			if(count(num.begin(),num.end(),'9')==n)
				return "1"+string(n-1,'0')+"1";

			string ans(n,'#');
			for(int i=n-1;0<=i;i--)
				ans[i]=ans[n-1-i]=num[i];
			if(ans<=num)
			{
				bool b=true;
				for(int i=(n-1)/2;0<=i;i--)
					if(b)
					{
						if(ans[i]<'9')
						{
							ans[i]++;
							ans[n-1-i]=ans[i];
							b=false;
						}
						else
							ans[n-1-i]=ans[i]='0';
					}
			}
			return ans;
		}
};