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”就会超时,难道它的测试样例有括号不匹配的情况····