HDU5920【模拟】

来源:互联网 发布:中国房地产市场知乎 编辑:程序博客网 时间:2024/04/28 09:14

模拟题这种东西啊~就是自己读题,自己打,没有别的方法。。。贴份6000+b的code跑;

#include <bits/stdc++.h>using namespace std;//typedef long long LL;const int N=1e5+10;char s[N];      //输入串char tmp[N];//每次要处理的串;char t1[N]; //要处理的前半char t3[N];char t2[N]; //后半;//答案串,和答案数量char ans[55][N];int res;char jian[N];int cal(char *a, char *b)//a-b{    int jie = 0;    int lena = strlen(a);    int lenb = strlen(b);    int i,j;    for(i = lenb-1, j = lena-1; i >= 0 || j >= 0; i--,j--)    {        if(i >= 0)            a[j] = a[j]-(b[i]+jie)+'0';        else            a[j] = a[j]-jie;        if(a[j] < '0')        {            a[j] += 10;            jie = 1;        }        else            jie = 0;    }    int k;    for(int i = 0; i < lena; i++)    {        if(a[i] != '0')        {            k = i;            break;        }    }    int h = 0;    for(int i = k; i < lena; i++)        a[h++] = a[i];    if(!h) a[h++]='0';    a[h] = '\0';    strcpy(jian,a);}int main(){    char one[5];    strcpy(one,"1");    int cas=1;    int T;    scanf("%d",&T);    while(T--)    {        scanf("%s",tmp);        res=0;        while(1)        {            int len=strlen(tmp);            if(len==1)            {                strcpy(ans[res++],tmp);                break;            }            if(len%2)                           //奇数            {                char mid;                int num1,num2,num3;                num1=num2=num3=0;                for(int i=0;i<len/2;i++)                    t3[num3++]=tmp[i];                for(int i=len/2-1;i>=0;i--)                    t1[num1++]=tmp[i];                mid=tmp[len/2];                for(int i=len/2+1;i<len;i++)                    t2[num2++]=tmp[i];                t1[num1]='\0';                t2[num2]='\0';                t3[num3]='\0';                int temp=strcmp(t2,t1);                if(temp>0)                {                    int zsq=0;                    for(int i=num1-1;i>=0;i--)                        ans[res][zsq++]=t1[i];                    ans[res][zsq++]=mid;                    for(int i=0;i<num1;i++)                        ans[res][zsq++]=t1[i];                    ans[res][zsq]='\0';                    cal(tmp,ans[res]);                    res++;                    strcpy(tmp,jian);                }                else if(temp==0)                {                    strcpy(ans[res],tmp);                    res++;                    break;                }                else                {                    if(mid=='0')                    {                        cal(t3,one);                        if(t3[0]=='0')                        {                            strcpy(ans[res++],"1");                            strcpy(ans[res++],"99");                            break;                        }                        int zsq=0;                        int jian_len=strlen(jian);                        for(int i=0;i<jian_len;i++)                            ans[res][zsq++]=jian[i];                        ans[res][zsq++]=mid;                        for(int i=jian_len-1;i>=0;i--)                            ans[res][zsq++]=jian[i];                        ans[res][zsq]='\0';                        cal(tmp,ans[res]);                        strcpy(tmp,jian);                        res++;                    }                    else                    {                        mid--;                        int zsq=0;                        for(int i=0;i<num3;i++)                            ans[res][zsq++]=t3[i];                        ans[res][zsq++]=mid;                        for(int i=num3-1;i>=0;i--)                            ans[res][zsq++]=t3[i];                        ans[res][zsq]='\0';                        cal(tmp,ans[res]);                        strcpy(tmp,jian);                        res++;                    }                }            }            else                                //偶数            {                int num1,num2,num3;                num1=num2=num3=0;                for(int i=0;i<len/2;i++)                    t3[num3++]=tmp[i];                for(int i=len/2-1;i>=0;i--)                    t1[num1++]=tmp[i];                for(int i=len/2;i<len;i++)                    t2[num2++]=tmp[i];                t1[num1]='\0';                t2[num2]='\0';                t3[num3]='\0';                int temp=strcmp(t2,t1);                if(temp>0)                {                    int zsq=0;                    for(int i=num1-1;i>=0;i--)                        ans[res][zsq++]=t1[i];                    for(int i=0;i<num1;i++)                        ans[res][zsq++]=t1[i];                    ans[res][zsq]='\0';                    cal(tmp,ans[res]);                    strcpy(tmp,jian);                    res++;                }                else if(temp==0)                {                    strcpy(ans[res],tmp);                    res++;                    break;                }                else                {                    cal(t3,one);                    if(jian[0]=='0')                    {                        strcpy(ans[res++],"1");                        strcpy(ans[res++],"9");                        break;                    }                    int zsq=0;                    int jian_len=strlen(jian);                    for(int i=0;i<jian_len;i++)                        ans[res][zsq++]=jian[i];                    for(int i=jian_len-1;i>=0;i--)                        ans[res][zsq++]=jian[i];                    ans[res][zsq]='\0';                    cal(tmp,ans[res]);                    strcpy(tmp,jian);                    res++;                }            }        }        printf("Case #%d:\n",cas++);        printf("%d\n",res);        for(int i=0;i<res;++i)            printf("%s\n",ans[i]);    }    return 0;}


0 0
原创粉丝点击