zoj 3816 Generalized Palindromic Number (根据对称性来搜)
来源:互联网 发布:从零开始学linux编程 编辑:程序博客网 时间:2024/05/29 05:55
A number that will be the same when it is written forwards or backwards is known as a palindromic number. For example, 1234321 is a palindromic number.
We call a number generalized palindromic number, if after merging all the consecutive same digits, the resulting number is a palindromic number. For example, 122111 is a generalized palindromic number. Because after merging, 122111 turns into 121 which is a palindromic number.
Now you are given a positive integer N, please find the largest generalized palindromic number less thanN.
Input
There are multiple test cases. The first line of input contains an integer T (about 5000) indicating the number of test cases. For each test case:
There is only one integer N (1 <= N <= 1018).
Output
For each test case, output the largest generalized palindromic number less thanN.
Sample Input
41212312241122
Sample Output
11
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>#define maxn 401#define MAXN 200005#define INF 0x3f3f3f3f#define mod 1000000007#define eps 1e-6const double pi=acos(-1.0);typedef long long ll;using namespace std;ll n,m,ans;int tot,dig[20],le[20],ri[20];ll get(int num1,int num2){ int i; ll res=0; for(i=1;i<=num1;i++) { res=res*10+le[i]; } for(i=num2;i>=1;i--) { res=res*10+ri[i]; } return res;}ll dfs(int num1,int num2,int limit){ ll t,res=0; if(num1+num2>tot) { res=get(num1-1,num2); if(res<m) return res; return 0; } int i,j,ed; ed=limit?dig[tot-num1+1]:9; for(i=ed;i>=0;i--) { le[num1]=i; if((num1==1||le[num1]!=le[num1-1])&&!(num1==1&&i==0)&&(num1+num2<tot)) { for(j=1; num1+num2+j<=tot; j++) // r与之匹配的个数 { ri[num2+j]=i; t=dfs(num1+1,num2+j,limit&&(i==ed)); res=max(res,t); } } else { t=dfs(num1+1,num2,limit&&(i==ed)); res=max(res,t); } if(res>0) return res; } return res;}void solve(){ int i,j; tot=0; m=n; while(n) { dig[++tot]=n%10; n/=10; } ans=dfs(1,0,1); printf("%lld\n",ans);}int main(){ int i,j,t; scanf("%d",&t); while(t--) { scanf("%lld",&n); solve(); } return 0;}
- zoj 3816 Generalized Palindromic Number (根据对称性来搜)
- ZOJ - 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number
- ZOJ 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number(枚举加构造)
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- zoj 3816 Generalized Palindromic Number(暴力枚举)
- zoj 3816 Generalized Palindromic Number(搜索)
- ZOJ 3816 Generalized Palindromic Number dfs+暴力枚举
- ZOJ Problem Set - 3816 Generalized Palindromic Number 搜索+贪心
- ZOJ - 3816 Generalized Palindromic Number dfs+数位DP+贪心
- ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- [数位dp+二分] zoj Generalized Palindromic Number
- ZOJ3816--Generalized Palindromic Number(DFS)
- zoj3816 Generalized Palindromic Number (暴力dfs)
- zoj3816,Generalized Palindromic Number,牡丹江网络赛,乱搞
- NotificationManager和Notification的使用总结
- cannot open shared object file: No such file or directory
- android activity启动的时候隐藏软键盘
- 基于方向梯度直方图的行人检测
- [1143]面向对象程序设计上机练习四(变量引用)
- zoj 3816 Generalized Palindromic Number (根据对称性来搜)
- 先其他app发送简单数据
- LoadRunner参数化详解
- Adobe Dreamweaver 网页制作一行3个代码模板
- 详解Jquery的$命名冲突及对应解决方法
- BCD错误的修复和Win7启动备份方法
- poj-2453
- 使用live555 VLC发送接收视频TS流
- 刘政平_下一代移动安全