调了一会不知道错哪了,希望有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;
}