`

5. The Next Palindrome

    博客分类:
  • SPOJ
J# 
阅读更多
                        
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.
题目分析:这题与上次华中南赛区的一个题目一样,曾记得当时我一看到这样的题目就不想做,觉得很麻烦,所以马上果断地扔给zsq做,唉,这也反映出我一向的怪毛病,碰到麻烦题就不想做。这次再次做这个题目,发现只要把这个题目的思路好好的想清楚,写代码还是挺快,其实也不是很长,一交,局然神奇般的1Y
    题目思路其实很简单,首先考虑特殊情况。当k<9时,直接输出k+1;当k各位全部都是9时,如k=9999,直接输出10001。
     其它情况,我们可以肯定输出的值最多也就是全部都是9,也就是说最后一位来处理时肯定不会超过9,所以不需要处理最后一位的进位问题。
     首先按k的位数分为奇数、偶数两种情况对称处理。按照对称位置,低位服从于高位,即不管低位的值是什么,全部都改为与对称的高位的值相同。这时可能会出现数k的值会减少,这时通过中间位加1,然后处理相关进位问题即可。
//贪心+模拟
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1000010;
char k[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        gets(k);
        int len=strlen(k);
        if(len==1)
        {
            if(k[0]>='0'&&k[0]<='8')    putchar(k[0]+1);
            else    puts("11");
            continue;
        }
        int i;
        for(i=0;i<len;i++)
        {
            if(k[i]!='9')   break;
        }
        if(i>=len)
        {
            putchar('1');
            for(int i=1;i<len;i++)  putchar('0');
            puts("1");
            continue;
        }
        k[len-1]++;
        for(int i=len-1;i>=0;i--)
        {
            if(k[i]-'0'>9)  k[i]='0',k[i-1]++;
            else    break;
        }
        if(len&1)
        {//处理奇数的情况
            int mid=len/2;
            bool flag=false;//用于标记数k是否变小啦
            for(int i=len-1;i>mid;i--)
            {
                if(k[i]>k[2*mid-i])    flag=true;//数k变小
                k[i]=k[2*mid-i];
            }
            if(flag)
            {//数k比原数小,需要调整
                k[mid]++;
                int l=mid;
                while(l>=0)
                {
                    if(k[l]-'0'>9)
                    {
                        k[l]=k[2*mid-l]='0';
                        k[l-1]++,k[2*mid-(l-1)]++;
                        l--;
                    }
                    else    break;
                }
            }
            puts(k);
        }
        else
        {//处理偶数的情况
            int mid=len/2;
            bool flag=false;//用于标记数k是否变小啦
            for(int i=len-1;i>=mid;i--)
            {
                int j=2*mid-i-1;
                if(k[i]>k[j])   flag=true;//数k变小
                k[i]=k[j];
            }
            if(flag)
            {//数k比原数小,需要调整
                int i=mid,j=mid-1;
                k[i]++,k[j]++;
                while(i<len&&j>=0)
                {
                    if(k[i]-'0'>9)
                    {
                        k[i]=k[j]='0';
                        k[i+1]++,k[j-1]++;
                        i++,j--;
                    }
                    else    break;
                }
            }
            puts(k);
        }
    }
    return 0;
}



分享到:
评论

相关推荐

    huiwenshu.rar_palindrome

    标题中的“huiwenshu.rar_palindrome”表明这是一个关于回文数的程序或代码库,可能用于教学或练习目的。回文数是指正向读和反向读都一样的数字,比如121、12321等。在银行管理场景中,回文数可能与账户编号、交易...

    Codeforces Round #627 (Div. 3)B. Yet Another Palindrome Problem

    Yet Another Palindrome Problem 题目链接-B. Yet Another Palindrome Problem 题目大意 给一个长为n(≤5000)的数组,问是否存在一个长度至少为3的子序列是回文的,子序列的数可以不连续但是相对顺序不可变 解题...

    Codeforces D1/D2. Prefix-Suffix Palindrome (Manacher) /详解

    正常来说暴力的思路是先匹配前缀pre和后缀suf,找到第一个不匹配的l和r,然后在由l开始从左向右求最长的回文串palindrome,以及由r开始从右向左求最长的回文串palindrome,那么pre+palindrome+suf就是答案。...

    Codeforces Round #627 (Div. 3) B. Yet Another Palindrome Problem

    传送门 题意: 一个长度为n的数组,为删除一些数后,剩下的数能否构成长度大于3的回文数组 思路: 只要能找到两个相等的数,且他们的间距大于2即可 o(n^2)的暴力就能过 比赛时写了一个o(n)的 就是把所有相等的数放到...

    Palindrome Sub-Array

    Palindrome Sub-Array,Problem Description  A palindrome sequence is a sequence which is as same as its reversed order. For example, 1 2 3 2 1 is a palindrome sequence, but 1 2 3 2 2 is not. Given a 2-...

    LeetCode9 Palindrome Number

    《LeetCode9:判断回文数——Java实现详解》 在编程的世界里,LeetCode是一个广受欢迎的在线平台,它提供了各种算法问题供程序员们挑战和提升技能。今天我们要探讨的是LeetCode第9题——“回文数”。...

    palindrome22.in

    palindrome22.in

    POJ1159-Palindrome

    6. **AC代码分析**:`POJ1159-Palindrome.cpp` 文件很可能是通过问题的C++代码实现,可能包含了上述的回文判断方法和完整的I/O流程。而`POJ1159-Palindrome.doc` 文件可能包含了解题思路、算法分析和代码解释等内容...

    palindrome_prime.c

    palindrome_prime.c

    Codeforces D1/D2. Prefix-Suffix Palindrome (字符串hash) /详解

    正常来说暴力的思路是先匹配前缀pre和后缀suf,找到第一个不匹配的l和r,然后在由l开始从左向右求最长的回文串palindrome,以及由r开始从右向左求最长的回文串palindrome,那么pre+palindrome+suf就是答案。...

    PyPI 官网下载 | check-palindrome-kriti-0.0.1.tar.gz

    5. 可能还有测试文件(如`tests`目录)和示例文件(如`examples`目录),帮助用户理解和验证库的功能。 为了使用这个库,开发者需要首先解压`check-palindrome-kriti-0.0.1.tar.gz`,然后在命令行中运行`python ...

    Palindrome.py

    Palindrome.py

    【Codeforces Round#620 (Div. 2)】B. Longest Palindrome 题解

    He learned that a palindrome is a string that is the same as its reverse. For example, strings “pop”, “noon”, “x”, and “kkkkkk” are palindromes, while strings “moon”, “tv”, and “abab” ...

    Codeforces Round #620 (Div. 2) Longest Palindrome

    B. Longest Palindrome time limit per test1 second memory limit per test256 megabytes ... He learned that a palindrome is a string that is the same as its reverse. For example, strings

    Palindrome.java

    回文数Java

    【Lintcode】415. Valid Palindrome

    题目地址: https://www.lintcode.com/problem/valid-palindrome/description 给定一个字符串,只考虑字母和数字,字母忽略大小写区别,忽略所有其他字符,问该字符串是否... * @return: Whether the string is a vali

    palindrome

    《回文:数据结构的魅力与应用》 回文,这个看似简单的词汇,实则蕴含了丰富的数学和计算机科学内涵。在中文中,回文是指正读反读都能保持相同的词语,如“上海自来水来自海上”。而在计算机领域,尤其是数据结构中...

    perlgolf_history_070109.pdf

    On The Game...............................................................................................................................13 2.1. History................................................

    JAVA程序 Palindrome(回文?)

    JAVA程序 Palindrome.java 输入任何字母数字组合 检查是否是回文结构? 例:abccba 从左往右看 和 从右往左看一样 为回文结构 包括检查是否带标点符号 检查是否有空格 如a bccba 输入带空格 仍为回文结构

    Pku acm 第1159题 Palindrome 代码

    Pku acm 第1159题 Palindrome 代码,有详细的注释,动态规划

Global site tag (gtag.js) - Google Analytics