SPOJ 5. The Next Palindrome
大于某个数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相关推荐
- SPOJ 5 The Next Palindrome
题目大意就是给出一个数,就比他大的最近的一个回文数,而数据范围到了10^1000000,所以暴搜之类的肯定不行的. 所以就要用字符串处理了. 首先如果输入数包含的数字全是9的话,那么显然应该输出100 ...
- SPOJ - IITKWPCE Let us play with strings(回文自动机+Palindrome Series优化dp)
题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,问最少拆分成多少个连续的子串,使得每个子串都是一个回文串 题目分析:dp[ i ] 代表 s[ 1 : i ] 的前缀最少可以拆分成多少个连 ...
- 【LeetCode】Palindrome Partitioning 解题报告
[题目] Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...
- 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 ...
- BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries ...
- 234. Palindrome Linked List - Easy
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- LeetCode 125 Valid Palindrome(有效回文)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/5062 ...
- Lintcode108 Palindrome Partitioning || solution 题解
[题目描述] Given a strings, cutsinto some substrings such that every substring is a palindrome. Return t ...
- 数位DP 回文序列 POJ-3280 Cheapest Palindrome
Cheapest Palindrome [ POJ - 3280 ] 题目大意: 给定字符串s,长度为m,由n个小写字母组成.在s的任意位置增删字母,把它变成回文串,增删特定字母的花费不同,求最小花费 ...
最新文章
- unity 200.8m yoy_专场分享会|大会最新Unity、中创文旅专场预告来啦!
- linux无锁化编程--__sync_fetch_and_add系列原子操作函数
- HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包
- 爱我别走:产品大改版时,如何避免用户流失?
- 华为云MySQL数据库外网使用
- 初识贪心——调度问题
- PHP判断用户是否登录
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)...
- 有效解决RaycastTarget勾选过多的烦恼
- pytorch+cuda+cudnn下载、安装和配置
- c语言整形数组存放字符串,用一维字符数组存放字符串
- Cartoon-Stylegan2:快来将你的图片漫画风
- 系统弱口令检测与网络端口扫描
- 职业生涯步步高(转)
- nagios之nsca被动监控
- 三层vxlan原理_网工知识角|没人会告诉你的网络SDN软定义技术中VXLAN的4个特点
- 我赢资讯10分钟程序化交易决策系统,把握涨跌背后的真实原因,选择最具价值的投资方向...
- Qt制作漂亮个性化的界面
- 陶哲轩等人用编程方法,推翻了60年几何难题「周期性平铺猜想」
- GZHU18级寒假训练:Sagittarius's Trial-J
热门文章
- CAS:26915-72-0,mPEG-Methacrylate,mPEG-MAC,甲氧基-聚乙二醇-甲基丙烯酸酯
- 手机NFC与可穿戴设备快速联动配对支付方案(简称“NB pay”)
- Android获取IP地址的两种方式(准确版)
- 互联网接入IPv6改造解决方案
- 【Matting】MODNet:实时人像抠图模型-笔记
- Mellanox交换机基础
- uml图中的连线和方框代表什么含义?
- Python可视化神器:pyecharts,轻松绘制 30+ 种超实用精美图表!
- EntityManager的基本方法
- org.codehaus.jettison.json.JSONObject类型的Null值怎么判断的问题,JSONObject$Null