蒟蒻求助:本机AC洛谷RE
查看原帖
蒟蒻求助:本机AC洛谷RE
421773
unsigned_char楼主2021/3/12 21:29

模拟做法,本机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;
}
2021/3/12 21:29
加载中...