zoukankan      html  css  js  c++  java
  • 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]
    ");
    }
    
    int main()
    {
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            init();
            gets(tmp);
            c();
            work();
            print();
        }
        return 0;
    }
  • 相关阅读:
    Celery的使用
    python中使用redis
    Redis基础
    版本控制器git
    day 74作业
    Djangorestfromwork作业1
    Django rest-framework的jwt认证
    Django --form验证
    cx-oracle-------------------安装
    排序算法
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5378278.html
Copyright © 2011-2022 走看看