Ugly Problem

Posted mxzf0213

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ugly Problem相关的知识,希望对你有一定的参考价值。

Ugly Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
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
分析:找一个较大回文数,然后大数相减;
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<ll,int>
#define Lson L, mid, ls[rt]
#define Rson mid+1, R, rs[rt]
const int maxn=1e3+10;
using namespace std;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
inline ll read()
{
    ll x=0;int f=1;char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
    return x*f;
}
int n,m,k,t,cnt,cas;
char a[maxn],ans[52][maxn];
string gao(string a, string b){
    int lena = a.length();
    int lenb = b.length();
    int len = max(lena, lenb) + 5;
    char res[len];
    memset(res, 0, sizeof(res));
    int flag, reslen = len;
    len--;
    res[len] = 0;
    len--;
    lena--; lenb--;
    flag = 0;
    while(lenb >= 0){
        res[len] = a[lena--] - b[lenb--] + 0 - flag;
        flag = 0;
        if(res[len] < 0){
            flag = 1;
            res[len] = res[len] + 10;
        }
        len--;
    }
    while(lena >= 0){
        res[len] = a[lena--] - flag;
        flag = 0;
        if(res[len] < 0){
            flag = 1;
            res[len] = res[len] + 10;
        }
        len--;
    }
    while((res[flag] == 0 || res[flag] == 0) && flag < reslen) flag++;
    if(flag == reslen) return "0";
    return res + flag;
}
void find(char*p,int now)
{
    int i,len=strlen(p);
    ans[now][len]=0;
    for(int i=0;i<(len+1)/2;i++)
        ans[now][i]=ans[now][len-1-i]=p[i];
    bool flag=false;
    for(int i=len/2-1;i>=0;i--)
    {
        if(p[i]<p[len-1-i])break;
        else if(p[i]>p[len-1-i])
        {
            ans[now][i]--;
            ans[now][len-1-i]--;
            for(int j=i+1;j<len-1-i;j++)ans[now][j]=ans[now][len-1-j]=9;
            break;
        }
    }
    for(i=0;ans[now][i]==0;i++)
    {
        ans[now][len-1-i]=9;
    }
    strcpy(ans[now],ans[now]+i);
    strcpy(a,gao(p,ans[now]).c_str());
}
int main()
{
    int i,j;
    scanf("%d",&t);
    while(t--)
    {
        cnt=0;
        scanf("%s",a);
        while(strcmp(a,"0")!=0)
        {
            find(a,cnt);
            cnt++;
        }
        printf("Case #%d:\n%d\n",++cas,cnt);
        rep(i,0,cnt-1)printf("%s\n",ans[i]);
    }
    //system("Pause");
    return 0;
}
 

以上是关于Ugly Problem的主要内容,如果未能解决你的问题,请参考以下文章

hdu-5920 Ugly Problem(贪心)

高精度 JAVAHDU 5920 Ugly Problem

HDU 5920 Ugly Problem 模拟 (2016中国大学生程序设计竞赛(长春))

2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟

HDU - 5920 Ugly Problem 求解第一个小于n的回文数

UVA 136 Ugly Numbers