大于某个数K的最小回文数,做的很纠结~对很多python细节还不是很熟。测试了找到的所有用例,结果是对的,但提交是TLE,暂时不管了,先放到这了。

主要分K中数字为1个和多个两种情况考虑

1. 如果K只含有一个数字,则结果就为K+1,当K=9时结果为11

2. 当数字个数大于1时,将K分为两部分,并将前半部分对称到后半部分得到P。这个时候又要考虑两种情况:

a. 如果得到的新数字P>K,则P就是大于K的最小回文数,因为P和K的前半部分是一样的,而后半部分又是前半部分的对称,所以P和K之间不会再有比P小的回文数了。

b. 如果得到的新数字P<K,则需要从P的中间增加数字来得到新的回文数P‘,因为根据回文数两头对称的特点,增加中间的数才能得到最小的回文数。

t=input()
while t:K=raw_input()l=len(K)if l==1:if K[0]<'9':print str(int(K[0])+1)else:print '11'else:P=list(K)rng=l>>1if l%2==1:rng+=1for i in range(rng):P[l-i-1]=K[i]if cmp(''.join(P),K)<=0:i=l>>1while i<l:n=int(P[i])+1if n>9:P[i]='0'i+=1else:P[i]=str(n)break;if i==l: P.append('1')K=[]l=len(P)rng=l>>1for i in range(rng):K.append(P[l-i-1])for i in range(rng,l):K.append(P[i])print ''.join(K)else:print ''.join(P)t-=1

网上找到的相关资料。

http://www.java3z.com/cwbwebhome/article/article5/5991.html

http://wenwen.soso.com/z/q185475753.htm

http://galaas.blogbus.com/tag/%E6%9C%80%E5%B0%8F%E5%9B%9E%E6%96%87%E6%95%B0/

1. 关于python源文件中的编码问题

python的源码默认是ascii编码,所以如果有中文的话会出现异常(source code exception什么的),所以如果想在源码中加入中文需要指明编码,编码说明必须要写在文件的第一行或第二行。具体可以参考:http://www.python.org/dev/peps/pep-0263/

2. python中没有指针

3. python中的字符串操作:http://www.pythonclub.org/python-basic/string

4. python中的字符不能直接和整数做运算,需要str(int(c)+1)

5. python中的字符串不能更改(类似于char *s="aaa"),字符型的list和字符串之间的转换: 字符串-->list:s=list(s)   list-->字符串:‘’.join(l)

用C写的AC代码:

#include <stdio.h>
#include <string.h>int main()
{int t,len,l,m,r,c,cur;char K[1000001],tmp[1000001];scanf("%d",&t);while(t--){memset(K,0,sizeof(K));memset(tmp,0,sizeof(tmp));scanf("%s",K);len=strlen(K);if(len==1&&K[0]<'9')printf("%c\n",K[0]+1);else if(len==1)printf("11\n");else{strcpy(tmp,K);for(l=0,r=len-1;l<r;l++,r--) tmp[r]=tmp[l];if(strcmp(tmp,K)>0)printf("%s\n",tmp);else{cur=m=len>>1;tmp[cur]+=1;c=(tmp[cur]>'9')?1:0;for(;c&&cur<len;cur++){tmp[cur]='0';tmp[cur+1]+=1;c=(tmp[cur+1]>'9')?1:0;}if(cur==len) tmp[len++]='1';for(l=0,r=len-1;r>=m;l++,r--) K[l]=tmp[r];l=(len&0x1)?(m+1):m;for(;l<len;l++) K[l]=tmp[l];printf("%s\n",K);}}}return 0;
}

SPOJ 5. The Next Palindrome相关推荐

  1. SPOJ 5 The Next Palindrome

    题目大意就是给出一个数,就比他大的最近的一个回文数,而数据范围到了10^1000000,所以暴搜之类的肯定不行的. 所以就要用字符串处理了. 首先如果输入数包含的数字全是9的话,那么显然应该输出100 ...

  2. SPOJ - IITKWPCE Let us play with strings(回文自动机+Palindrome Series优化dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,问最少拆分成多少个连续的子串,使得每个子串都是一个回文串 题目分析:dp[ i ] 代表 s[ 1 : i ] 的前缀最少可以拆分成多少个连 ...

  3. 【LeetCode】Palindrome Partitioning 解题报告

    [题目] Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...

  4. bzoj 2588 Spoj 10628. Count on a tree (可持久化线段树)

    Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MB Submit: 7669  Solved: 1894 [Sub ...

  5. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )

    全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries ...

  6. 234. Palindrome Linked List - Easy

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  7. LeetCode 125 Valid Palindrome(有效回文)(*)

    版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/5062 ...

  8. Lintcode108 Palindrome Partitioning || solution 题解

    [题目描述] Given a strings, cutsinto some substrings such that every substring is a palindrome. Return t ...

  9. 数位DP 回文序列 POJ-3280 Cheapest Palindrome

    Cheapest Palindrome [ POJ - 3280 ] 题目大意: 给定字符串s,长度为m,由n个小写字母组成.在s的任意位置增删字母,把它变成回文串,增删特定字母的花费不同,求最小花费 ...

最新文章

  1. unity 200.8m yoy_专场分享会|大会最新Unity、中创文旅专场预告来啦!
  2. linux无锁化编程--__sync_fetch_and_add系列原子操作函数
  3. HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包
  4. 爱我别走:产品大改版时,如何避免用户流失?
  5. 华为云MySQL数据库外网使用
  6. 初识贪心——调度问题
  7. PHP判断用户是否登录
  8. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)...
  9. 有效解决RaycastTarget勾选过多的烦恼
  10. pytorch+cuda+cudnn下载、安装和配置
  11. c语言整形数组存放字符串,用一维字符数组存放字符串
  12. Cartoon-Stylegan2:快来将你的图片漫画风
  13. 系统弱口令检测与网络端口扫描
  14. 职业生涯步步高(转)
  15. nagios之nsca被动监控
  16. 三层vxlan原理_网工知识角|没人会告诉你的网络SDN软定义技术中VXLAN的4个特点
  17. 我赢资讯10分钟程序化交易决策系统,把握涨跌背后的真实原因,选择最具价值的投资方向...
  18. Qt制作漂亮个性化的界面
  19. 陶哲轩等人用编程方法,推翻了60年几何难题「周期性平铺猜想」
  20. GZHU18级寒假训练:Sagittarius's Trial-J

热门文章

  1. CAS:26915-72-0,mPEG-Methacrylate,mPEG-MAC,甲氧基-聚乙二醇-甲基丙烯酸酯
  2. 手机NFC与可穿戴设备快速联动配对支付方案(简称“NB pay”)
  3. Android获取IP地址的两种方式(准确版)
  4. 互联网接入IPv6改造解决方案
  5. 【Matting】MODNet:实时人像抠图模型-笔记
  6. Mellanox交换机基础
  7. uml图中的连线和方框代表什么含义?
  8. Python可视化神器:pyecharts,轻松绘制 30+ 种超实用精美图表!
  9. EntityManager的基本方法
  10. org.codehaus.jettison.json.JSONObject类型的Null值怎么判断的问题,JSONObject$Null