hdoj5920Ugly Problem

Ugly Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 476    Accepted Submission(s): 190
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 ( 1s101000).
 

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
 

Source
2016中国大学生程序设计竞赛(长春)-重现赛
 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long LL;
typedef pairpii;
const int maxn=10010;
char s[maxn];
char MaxPal[maxn];
char str[55][maxn];
int ans=0;
void rev(char *a){
    int len=strlen(a);
    for(int i=0;i=(b[i]-'0')){
            a[i]=((a[i]-'0')-q-(b[i]-'0'))+'0';q=0;
        }
        else {
            a[i]=((a[i]-'0')+10-q-(b[i]-'0'))+'0';q=1;
        }
    }int i;
    for(i=lena-1;i>=0;--i){
        if(a[i]!='0'){a[i+1]=0;break;}
    }rev(a);
}
void Find(char *temp){
    int len=strlen(temp);bool sign=true;
    for(int i=0;i=0;--i){
            if(temp[i]!=temp[len/2+len/2-i]){
                if(temp[i]=0;++j,--i){
                        MaxPal[j]=temp[i];
                    }MaxPal[len]=0;
                    return ;
                }
                else {
                    int k;
                    for(k=len/2;k>=0;--k){
                        if(temp[k]!='0'){break;}
                    }
                    for(int j=0;j=0;--k,++j){
                        MaxPal[j]=temp[k];
                    }MaxPal[len]=0;
                    if(MaxPal[0]=='0'){
                        for(int j=0;j=0;--i){
            if(temp[i]!=temp[len-i-1]){
                if(temp[i]=0;++j,--i){
                        MaxPal[j]=temp[i];
                    }MaxPal[len]=0;
                    return ;
                }
                else {
                    int k;
                    for(k=len/2-1;k>=0;--k){
                        if(temp[k]!='0'){break;}
                    }
                    for(int j=0;j=0;--k,++j){
                        MaxPal[j]=temp[k];
                    }MaxPal[len]=0;
                    if(MaxPal[0]=='0'){
                        for(int j=0;j>t;
    while(t--){
        scanf("%s",s);
        Find(s);
        ans=0;Solve(s);
        printf("Case #%d:\n%d\n",Test++,ans);
        for(int i=0;i


你可能感兴趣的:(模拟)