zoukankan      html  css  js  c++  java
  • ZOJ

    Generalized Palindromic Number

    Time Limit: 2 Seconds                                     Memory Limit: 65536 KB                            

    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 than N.

    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 than N.

    Sample Input

    4
    12
    123
    1224
    1122
    

    Sample Output

    11
    121
    1221
    1121
    

                                Author: LIN, Xi                                         Source: The 2014 ACM-ICPC Asia Mudanjiang Regional First Round

    转自:http://blog.csdn.net/u011345136/article/details/39122741

    题意:求小于N的回文数,这个数的回文相同的数可以缩成一个数
    思路:dfs(l, r, flag):l代表左边侧长度,r代表右边的长度,flag代表是否处于边界,然后在搜索右边匹配左边的同时,枚举k,k代表右边连续相同的数都匹配左边的个数

      1 #include<iostream>
      2 #include<cstring>
      3 #include<cstdlib>
      4 #include<cstdio>
      5 #include<algorithm>
      6 #include<cmath>
      7 #include<queue>
      8 #include<map>
      9 
     10 #define N 55
     11 #define M 15
     12 #define mod 6
     13 #define mod2 100000000
     14 #define ll long long
     15 #define maxi(a,b) (a)>(b)? (a) : (b)
     16 #define mini(a,b) (a)<(b)? (a) : (b)
     17 
     18 using namespace std;
     19 
     20 int T;
     21 ll n;
     22 char s[N];
     23 ll ans;
     24 int len;
     25 char leftnum[N];
     26 char rightnum[N];
     27 
     28 void ini()
     29 {
     30 //    scanf("%lld",&n);
     31     cin>>n;
     32     ans=-1;
     33     //memset(left,0,sizeof(left));
     34     //memset(right,0,sizeof(right));
     35     sprintf(s+1,"%lld",n);
     36     //sprintf(s+1,"%I64d",n);
     37     len=strlen(s+1);
     38     for(int i=1;i<=len;i++){
     39         s[i]-='0';
     40     }
     41 }
     42 
     43 void out()
     44 {
     45     //printf("%lld
    ",ans);
     46     cout<<ans<<endl;
     47 }
     48 
     49 ll getans(int l,int r)
     50 {
     51     ll re=0;
     52     int i;
     53     for(i=1;i<=l;i++){
     54         re=re*10+leftnum[i];
     55     }
     56     for(i=r;i>=1;i--){
     57         re=re*10+rightnum[i];
     58     }
     59     return re;
     60 }
     61 
     62 ll dfs(int l,int r,int flag)
     63 {
     64     ll re=-1;
     65     int i,k,m;
     66     if(l+r-1>len) return -1ll;
     67     if(l+r-1==len){
     68         re=getans(l-1,r);
     69         if(re>=n) return -1ll;
     70         return re;
     71     }
     72 
     73     m= (flag==1) ? s[l] : 9;
     74     for(i=m;i>=0;i--)
     75     {
     76         leftnum[l]=i;
     77         if( (l==1 || leftnum[l]!=leftnum[l-1]) && !(l==1 && i==0) && (l+r!=len) )
     78         {
     79             for(k=1;k+l+r<=len;k++){
     80                 rightnum[k+r]=i;
     81                 re=max(re,dfs(l+1,r+k,flag && (m==i) ) );
     82             }
     83         }
     84         else{
     85             re=max(re,dfs(l+1,r,flag && (m==i) ));
     86         }
     87         if(re>0){
     88             return re;
     89         }
     90     }
     91     return re;
     92 }
     93 
     94 int main()
     95 {
     96     //freopen("data.in","r",stdin);
     97     scanf("%d",&T);
     98     for(int cnt=1;cnt<=T;cnt++)
     99    // while(T--)
    100     //while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF)
    101     {
    102         ini();
    103         ans=dfs(1,0,1);
    104         out();
    105     }
    106 
    107     return 0;
    108 }
  • 相关阅读:
    Visual Studio color schemes
    WebForm服务器验证控件与前端js自定义验证共同使用
    Powerdesigner设计表生成SQL脚本(带有注释)
    JS日期格式化
    C# 生成小于Int数值绝对值的随机数
    LINQ解析
    Could not calculate build plan:
    Maven Tomcat webapp
    用JS来改变CSS样式
    安装 groovy eclipse 插件
  • 原文地址:https://www.cnblogs.com/njczy2010/p/3961614.html
Copyright © 2011-2022 走看看