题目大意:
看样例猜题意:
输入:
1
(1)#(3)
(12)#(2)4(2)#(3)
(12)#(5)
输出:
1
111
12124222
212121205
代码:
#include<bits/stdc++.h>
#define maxn 50500
#define mod 1000000007
using 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”就会超时,难道它的测试样例有括号不匹配的情况····