求Hack
查看原帖
求Hack
585805
MCRS_lizi楼主2022/2/10 15:35

调了一会不知道错哪了,希望有Hack QAQ

#include<bits/stdc++.h>
using namespace std;
int n;
bool fake[1001];
struct sb
{
	string x,y;
	int lenx,leny,lev;
}a[1001];
string f;
bool check(int u,int v,int lu,int ru,int lv,int rv)
{
	if(ru>=a[u].leny)
	{
		return 0;
	}
	if(ru-lu!=rv-lv)
	{
		return 0;
	}
	for(int i=lu;i<=ru;i++)
	{
		if(a[u].y[i]!=a[v].x[i+lv-lu])
		{
			return 0;
		}
	}
	return 1;
}
bool answer(int ce,int l,int r)
{
	for(int i=l;i<=r;i++)
	{
		if(i>13)
		{
		//	cout<<i<<" ";
		}
		if(a[ce].y[i]=='(')
		{
			int s=i;
			while(a[ce].y[i]!=')')
			{
				i++;
			}
			if(!answer(ce,s+1,i-1))
			{
				return 0;
			}
		}
		else
		{
			for(int j=1;j<ce;j++)
			{
				if(check(ce,j,i,i+a[j].lenx-1,0,a[j].lenx-1))
				{
					//cout<<ce<<" "<<j<<" "<<i<<endl;
					if(fake[j])
					{
						return 0;
					}
					for(int k=i-1;k>=0;k--)
					{
						if(a[ce].y[k]==' ')
						{
							continue;
						}
						if(a[j].lev==1&&(a[ce].y[k]=='*'||a[ce].y[k]=='/'||a[ce].y[k]=='-'))
						{
							return 0;
						}
						else if(a[j].lev==2&&(a[ce].y[k]=='/'))
						{
							return 0;
						}
						break;
					}
					for(int k=i+a[ce].lenx;k<=a[ce].leny;k++)
					{
						if(a[ce].y[k]==' ')
						{
							continue;
						}
						if(a[j].lev==1&&(a[ce].y[k]=='*'||a[ce].y[k]=='/'))
						{
							return 0;
						}
					}
				}
			}
			
		}
	//	cout<<i<<endl;
	}
	return 1;
}
void gettmp()
{
	int cnt=0;
	char ch;
	while(cnt<7)
	{
		cin>>ch;
		cnt++;
	}
}
void getdfn(int ce)
{
	gettmp();
	cin>>a[ce].x;
	getline(cin,a[ce].y);
	a[ce].lenx=a[ce].x.length();
	a[ce].leny=a[ce].y.length();
	int cnt=0;
	for(int i=0;i<a[ce].leny;i++)
	{
		if(a[ce].y[i]=='(')
		{
			int l=i;
			while(a[ce].y[i]!=')')
			{
				i++;
			}
			if(!answer(ce,l+1,i-1))
			{
				fake[ce]=1;
				return;
			}
		}
		else
		{
			for(int j=1;j<ce;j++)
			{
				if(check(ce,j,i,i+a[ce].lenx-1,0,a[j].lenx-1))
				{
					if(cnt!=0)
					{
						cnt=min(a[j].lev,cnt);
					}
					for(int k=i-1;k>=0;k--)
					{
						if(a[ce].y[k]==' ')
						{
							continue;
						}
						if(a[j].lev==1&&(a[ce].y[k]=='*'||a[ce].y[k]=='/'||a[ce].y[k]=='-'))
						{
							fake[ce]=1;
							return;
						}
						else if(a[j].lev==2&&(a[ce].y[k]=='/'))
						{
							fake[ce]=1;
							return;
						}
						break;
					}
					for(int k=i+a[ce].lenx;k<=a[ce].leny;k++)
					{
						if(a[ce].y[k]==' ')
						{
							continue;
						}
						if(a[j].lev==1&&(a[ce].y[k]=='*'||a[ce].y[k]=='/'))
						{
							fake[ce]=1;
							return;
						}
					}
				}
			}
			if(a[ce].y[i]=='+'||a[ce].y[i]=='-')
			{
				cnt=1;
			}
			else if(a[ce].y[i]=='*'||a[ce].y[i]=='/')
			{
				if(cnt==0)
				{
					cnt=2;
				}
			}
		}
	}
	a[ce].lev=cnt;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		getdfn(i);
		cout<<a[i].lev<<endl;
	}
	getline(cin,f);
	a[++n].y=f;
	a[n].leny=f.length();
	if(answer(n,0,a[n].leny-1))
	{
		cout<<"OK";
	}
	else
	{
		cout<<"Suspicious";
	}
 	return 0;
}

2022/2/10 15:35
加载中...