HDU

来源:互联网 发布:windows解压war包 编辑:程序博客网 时间:2024/06/07 06:41

题目大意:

看样例猜题意:

输入:1(1)#(3)(12)#(2)4(2)#(3)(12)#(5)输出:111112124222212121205

代码:

#include<bits/stdc++.h>#define maxn 50500#define mod 1000000007using namespace std;int t,n,m,k;char a[maxn];int b[maxn];int temp[maxn]={0};int main(){    scanf("%d",&t);    while(t--)    {        memset(a,0,sizeof(a));        scanf("%s",a);        n=strlen(a);        m=0;k=0;        //int flag=0;//表示是否在括号外        int num=0;//表示前面的数串出现多少次        //int first=0;//表示是否是#后面的        for(int i=0;i<n;i++)        {            if(a[i]=='#')            {                for(i+=2;a[i]!=')'&&i<n;i++)                {                    num*=10;                    num+=(a[i]-'0');                }                for(int j=0;j<num;j++)                {                    for(int u=0;u<k;u++)                    {                        b[m++]=temp[u];                    }                }                k=0;num=0;//初始化                continue;            }            if(a[i]-'0'>=0&&a[i]-'0'<=9)            {                b[m++]=a[i]-'0';continue;            }            if(a[i]=='(')            {                for(i++;a[i]!=')'&&i<n;i++)                {                    temp[k++]=a[i]-'0';                }                //i++;            }        }        long long int ans=b[0];        for(int i=1;i<m;i++)        {            ans*=10;            ans=ans+b[i];            if(ans>100000000000000000)            {                ans%=mod;            }        }        ans%=mod;        /*for(int i=0;i<m;i++)        {            cout<<b[i];        }        cout<<endl;*/        printf("%I64d\n",ans);    }    //return 0;}

注:不知道为什么,在小循环判断条件里不加”&& i < n”就会超时,难道它的测试样例有括号不匹配的情况····