ZOJ 3930 Dice Notation

简单模拟题。一个int写成了char,搞了4个多小时。真垃圾。。

#include<stdio.h>
#include<string.h>

char tmp[2000000+10],s[2000000+10];
char ans[2000000+10];
char u[2000000+10];
int g;
int T,len,f;

void init()
{
    memset(tmp,0,sizeof tmp);
    memset(ans,0,sizeof ans);
    f=0;
    memset(s,0,sizeof s);
    len=0;
}

void c()
{
    for(int i=0; tmp[i]; i++)
        if(
            tmp[i]=='d'
            ||tmp[i]=='+'||tmp[i]=='-'||tmp[i]=='*'||tmp[i]=='/'
            ||tmp[i]=='('||tmp[i]==')'
            ||(tmp[i]>='0'&&tmp[i]<='9')
        )
            s[len++]=tmp[i];
}

void work()
{
    int pre=0;
    int pos1,pos2;
    for(int i=0; s[i]; i++)
    {
        if(s[i]=='d')
        {
            pos1=i,pos2=i;
            for(int j=i+1; s[j]; j++)
            {
                if(s[j]>='0'&&s[j]<='9') pos2=j;
                else break;
            }

            for(int j=i-1; j>=0; j--)
            {
                if(s[j]>='0'&&s[j]<='9') pos1=j;
                else break;
            }

            int a=0;
            for(int j=pos1; j<=i-1; j++) a=a*10+s[j]-'0';

            for(int j=pre; j<pos1; j++) ans[f++]=s[j];
            pre=pos2+1;

            memset(u,0,sizeof u);
            g=0;
            u[g++]='[';
            for(int j=i; j<=pos2; j++) u[g++]=s[j];
            u[g++]=']';

            if(a==0) a=1;
            if(a!=1) ans[f++]='(';
            for(int k=0; u[k]; k++) ans[f++]=u[k];
            for(int j=1; j<=a-1; j++)
            {
                ans[f++]='+';
                for(int k=0; u[k]; k++) ans[f++]=u[k];
            }
            if(a!=1) ans[f++]=')';

        }
    }
    for(int j=pre; s[j]; j++) ans[f++]=s[j];
}

void print()
{
    for(int i=0; ans[i]; i++)
    {
        if(ans[i]=='+'||ans[i]=='-'||ans[i]=='*'||ans[i]=='/') printf(" %c ",ans[i]);
        else printf("%c",ans[i]);
    }
    printf(" = [Result]\n");
}

int main()
{
    scanf("%d",&T);
    getchar();
    while(T--)
    {
        init();
        gets(tmp);
        c();
        work();
        print();
    }
    return 0;
}

 

posted @ 2016-04-11 14:23  Fighting_Heart  阅读(302)  评论(0编辑  收藏  举报