模拟做法,本机Dev_C++运行没问题,洛谷提交全部RE。(本机Windows 7)
请大佬指出问题
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct Node
{
char str[100];
int n,n_all;
int m;
bool up,last,last_af;
};
Node s[1000];
string a;
int main()
{
cin>>a;
for(int i=0;i<=999;++i)
{
s[i].n=1;
s[i].n_all=1;
s[i].m=0;
s[i].last=0;
s[i].up=0;
s[i].last_af=0;
}
int j=0;
for(int i=0;i<a.length();)
{
if(a[i]=='[')
{
if(a[i+2]>='0'&&a[i+2]<='9')
{
s[j].n_all*=(a[i+1]-'0')*10+(a[i+2]-'0');
i+=3;
}
else
{
s[j].n_all*=a[i+1]-'0';
i+=2;
}
}
if(a[i]>='A'&&a[i]<='Z')
{
int bf=0,af=0;
for(int l=i-1;l>=0;--l)
{
if(a[l]=='[')
{
++bf;
}
if(a[l]>='A'&&a[l]<='Z')
{
break;
}
}
if(i>=2)
{
if(a[i-2]>='0'&&a[i-2]<='9')
{
s[j].n=a[i-1]-'0'+(a[i-2]-'0')*10;
}
else
{
s[j].n=a[i-1]-'0';
}
}
for(int k=0;;++i,++k)
{
if(a[i]=='['||a[i]==']'||a[i]=='\0')
{
++j;
break;
}
s[j].str[k]=a[i];
}
for(int l=i;j>0;++l)
{
if(a[l]==']')
{
++af;
}
if(a[l]>='A'&&a[l]<='Z')
{
break;
}
}
if(bf<af&&j>=2)
{
if(s[j-2].last)
{
s[j-1].n_all*=s[j-2].n_all/s[j-2].n;
}
else
{
s[j-1].n_all*=s[j-2].n_all;
}
}
if(bf>af&&j>=1)
{
s[j-1].last_af=1;
}
if(a[i]==']'||a[i]=='\0')
{
s[j-1].last=1;
}
}
if(a[i]==']')
{
++i;
}
}
for(int i=0;i<=j;)
{
if(i!=0)
{
if(s[i].m!=0)
{
if(s[i-1].m<s[i-1].n_all&&s[i].n_all%s[i].m==0&&s[i-1].up==0)
{
--i;
continue;
}
}
s[i-1].up=0;
}
if(s[i].last==0)
{
if(s[i].m<s[i].n_all)
{
cout<<s[i].str;
++s[i].m;
}
s[i].up=1;
++i;
}
else
{
for(int l=1;l<=s[i].n&&s[i].m<s[i].n_all;++l)
{
cout<<s[i].str;
++s[i].m;
}
if(i!=0)
{
if(s[i-1].m<s[i-1].n_all)
{
--i;
continue;
}
}
if(s[i].n_all==s[i].m||s[i].last_af)
{
s[i].up=1;
++i;
}
}
}
return 0;
}