zoukankan      html  css  js  c++  java
  • 2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟

    Ugly Problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 0    Accepted Submission(s): 0
    Special Judge


    Problem Description
    Everyone hates ugly problems.

    You are given a positive integer. You must represent that number by sum of palindromic numbers.

    A palindromic number is a positive integer such that if you write out that integer as a string in decimal without leading zeros, the string is an palindrome. For example, 1 is a palindromic number and 10 is not.
     
    Input
    In the first line of input, there is an integer T denoting the number of test cases.

    For each test case, there is only one line describing the given integer s (1leq s leq 10^{1000}).
     
    Output
    For each test case, output “Case #x:” on the first line where x is the number of that test case starting from 1. Then output the number of palindromic numbers you used, n, on one line. n must be no more than 50. �en output n lines, each containing one of your palindromic numbers. Their sum must be exactly s.
     
    Sample Input
    2
    18
    1000000000000
     
     
    Sample Output
    Case #1:
    2
    9
    9
    Case #2:
    2
    999999999999
    1
     
    Hint
    9 + 9 = 18 999999999999 + 1 = 1000000000000
     
    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5920
    题意:将一个数拆成n(n<=50)个回文数的和。
    代码:
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s[2000];
    int ans[100][2000];
    int gg[100];
    int sub(int t,int len)
    {
        int i;
        for(i=len-1; i>=0; i--)
        {
            s[i]=s[i]-'0'-ans[t][i];
            if(s[i]<0)
            {
                s[i]+=10+'0';
                s[i-1]-=1;
            }
            else s[i]+='0';
        }
        for(i=0; i<len; i++)
            if(s[i]!='0') break;
        return i;
    }
    int main()
    {
        int i,j,t,T;
        while(scanf("%d",&T)!=EOF)
        {
            getchar();
            for(int asd=1; asd<=T; asd++)
            {
                scanf("%s",s);
                memset(ans,0,sizeof(ans));
                int pre=0,len=strlen(s);
                t=0;
                while(pre<len)
                {
                    int sign=1;
                    for(i=pre,j=len-1; i<=j; i++,j--)
                    {
                        ans[t][i]=ans[t][j]=s[i]-'0';
                        if(ans[t][j]>s[j]-'0') sign=0;
                        else if(ans[t][j]<s[j]-'0')sign=1;
                    }
                    gg[t]=pre;
                    if(sign==0)
                    {
                        i--;
                        ans[t][i]-=1;
                        while(i>=0&&ans[t][i]<0)
                        {
                            ans[t][i]+=10;
                            ans[t][i-1]-=1;
                            i--;
                        }
                        for(i=pre,j=len-1; i<=j; i++,j--)
                            ans[t][j]=ans[t][i];
                        if(ans[t][pre]==0)
                        {
                            ans[t][len-1]=9;
                            gg[t]=pre+1;
                        }
                    }
                    pre=sub(t,len);
                    t++;
                }
                printf("Case #%d:
    ",asd);
                printf("%d
    ",t);
                for(i=0; i<t; i++)
                {
                    for(j=gg[i]; j<len; j++)
                        printf("%d",ans[i][j]);
                    printf("
    ");
                }
            }
        }
        return 0;
    }
    View Code
    I am a slow walker,but I never walk backwards.
  • 相关阅读:
    Android中的网络编程
    JAVA 中的IO流
    JAVA网络编程
    JAVA中List的三个子类。
    JAVA中List的几个方法
    JAVA集合中的迭代器的遍历
    JAVA中集合转数组遍历
    【安卓4】事件处理——时间日期事件处理、长按事件
    【安卓4】事件处理——单选按钮触发事件、下拉列表触发事件
    【安卓4】事件处理——单击事件
  • 原文地址:https://www.cnblogs.com/GeekZRF/p/5931419.html
Copyright © 2011-2022 走看看