Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #define long long long
- #define nln '\n'
- using namespace std;
- bool palindrome(string str)
- {
- long lef = 0, rig = str.size()-1;
- while (lef <= rig)
- {
- if (str[lef] != str[rig])
- return 0;
- ++lef; --rig;
- }
- return 1;
- }
- void process(string &str, long lef, long rig)
- {
- if (palindrome(str))
- {
- while (str[lef] == '9' && lef >= 0 && rig < str.size())
- {
- --lef; ++rig;
- }
- if (lef >= 0)
- {
- str[lef] = (char)((long)str[lef]+1);
- str[rig] = str[lef];
- long l, r;
- if ((long)str.size() % 2 == 1)
- l = (long)str.size()/2, r = (long)str.size()/2;
- else
- l = (long)str.size()/2-1, r = (long)str.size()/2;
- while (l > lef && r < rig)
- {
- str[l] = '0';
- str[r] = '0';
- --l; ++r;
- }
- }
- else
- {
- if (str.size() % 2 == 0)
- {
- str.insert(str.begin()+str.size()/2, '0');
- for (long i = 0; i != str.size(); ++i)
- str[i] = '0';
- str[0] = '1'; str[str.size()-1] = '1';
- }
- else
- {
- for (long i = 0; i != str.size(); ++i)
- str[i] = '0';
- str[0] = '1';
- str += '1';
- }
- }
- return;
- }
- bool ok = 0;
- while (lef >= 0 && rig < str.size())
- {
- if (!ok)
- {
- if (str[lef] != str[rig])
- {
- ok = 1;
- if (str[lef] > str[rig])
- {
- str[rig] = str[lef];
- }
- else
- if (str[lef] < str[rig])
- {
- long l, r;
- if (str.size() % 2 == 0)
- {
- l = str.size()/2-1;
- r = str.size()/2;
- }
- else
- {
- l = str.size()/2;
- r = str.size()/2;
- }
- while (str[l] == '9' && l >= 0)
- {
- --l; ++r;
- }
- str[l] = (char)((long)str[l]+1);
- str[r] = str[l];
- str[rig] = str[lef];
- ++l; --r;
- while (l <= r)
- {
- str[l] = '0';
- str[r] = '0';
- ++l; --r;
- }
- }
- }
- }
- else
- {
- str[rig] = str[lef];
- }
- --lef; ++rig;
- }
- }
- int main()
- {
- //freopen("palinnum.inp", "r", stdin);
- //freopen("palinnum.out", "w", stdout);
- long t;
- cin >> t;
- for (long i = 1; i <= t; ++i)
- {
- string str;
- cin >> str;
- while (str[0] == '0')
- str.erase(0, 1);
- if ((long)str.size() % 2 == 1)
- process(str, (long)str.size()/2, (long)str.size()/2);
- else
- process(str, (long)str.size()/2-1, (long)str.size()/2);
- cout << str << nln;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment