Pagini recente » Cod sursa (job #3127688) | Cod sursa (job #1945225) | Cod sursa (job #240452) | Cod sursa (job #3251557) | Cod sursa (job #406369)
Cod sursa(job #406369)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const char iname[]="episoade.in";
const char oname[]="episoade.out";
const int maxn=1005;
char s[maxn];
int n,t,i,j,p,pos[maxn],ok,poz=0;
bool operator<(const pair<int,int> &a,const pair<int,int> &b)
{
return a.first<b.first;
}
pair<int,int> eval(int nivel)
{
if(nivel==0)
{
pair<int,int> r;
vector<pair<int,int> > V;
for(V.push_back(eval(nivel+1));s[poz]=='#';)
++poz,V.push_back(eval(nivel+1));
sort(V.begin(),V.end());
r=V[0];
for(size_t i=1;i<V.size();++i)
if(V[i].first!=V[i-1].second+1)
ok=0;
else
r.second=V[i].second;
return r;
}
if(nivel==1)
{
pair<int,int> r,aux;
for(r=eval(nivel+1);s[poz]=='>';)
{
++poz;
if(r.second!=(aux=eval(nivel+1)).first-1)
ok=0;
r.second=aux.second;
}
return r;
}
if(s[poz]=='(')
{
++poz;
pair<int,int> r=eval(0);
++poz;
return r;
}
int x=0;
while(s[poz]>='0'&&s[poz]<='9')
x=(x<<3)+(x<<1)+s[poz++]-'0';
return make_pair(pos[x],pos[x]);
}
int main()
{
freopen(iname,"r",stdin);
freopen(oname,"w",stdout);
fgets(s,sizeof(s),stdin);
scanf("%d%d",&t,&n);
while(t--)
{
poz=0;
for(i=1;i<=n;++i)
scanf("%d",&j),pos[j]=i;
ok=1;
eval(0);
printf("%d\n",ok);
}
fclose(stdin);
fclose(stdout);
return 0;
}