Pagini recente » Cod sursa (job #200141) | Cod sursa (job #1763590) | Cod sursa (job #1805145) | Cod sursa (job #231385) | Cod sursa (job #465024)
Cod sursa(job #465024)
/*
* File: Episoade!.cpp
* Author: marius
*
* Created on June 22, 2010, 6:22 PM
*/
#include <stdlib.h>
#include <cstring>
#include <string>
#include <vector>
#include <list>
#include <cstdio>
using namespace std;
int v[100];
vector<int> get(string s){
vector<int> v;int x=0;bool nr=false;
for(int i=0;i<s.length();i++)
if(isdigit(s[i])&&nr==false){
nr=true;
x=x*10+s[i]-'0';
}else if(nr&&!isdigit(s[i])){
v.push_back(x);
x=0;
nr=false;
}
return v;
}
bool chkGt(string s1,string s2){
vector<int> vv=get(s1);int MAX=0,MIN=0;
for(int i=0;i<vv.size();i++)
if(v[vv[i]]>MAX)
MAX=v[vv[i]];
vv=get(s2);
MIN=v[vv[0]];
for(int i=0;i<vv.size();i++)
if(v[vv[i]]<MIN)
MIN=v[vv[i]];
return MAX+1==MIN;
}
bool eval(string s){
list<string> nr;
list<bool> op;int l=0,par=0;
for(int i=0;i<s.length();i++){
if(s[i]=='(')
par++;
else if(s[i]==')'){
par--;
if(!par){
string ss=s.substr(l,i-l+1);
if(get(ss).size()>1&&!eval(ss.substr(1,ss.size()-2)))
return false;
nr.push_back(ss);
}
}
else if(par)
continue;
else{
op.push_back(s[i]=='>');
l=i+1;
}
}
int i=0;
list<string>::iterator it2=nr.begin();
for(list<bool>::iterator it=op.begin();it!=op.end();it++,i++){
if(*it){
string ss=*it2;
it2=nr.erase(it2);
if(!chkGt(ss,*it2))
return false;
(*it2).append(ss);
}else
it2++;
}
vector<int> * vv=new vector<int>[nr.size()];
i=0;
for(list<string>::iterator it=nr.begin();it!=nr.end();it++,i++)
vv[i]=get(*it);
for(i=0;i<nr.size()-1;i++)
for(int j=i+1;j<nr.size();j++){
const bool b=v[vv[i][0]]<v[vv[j][0]];
for(int ii=0;ii<vv[i].size();ii++)
for(int jj=0;jj<vv[j].size();jj++)
if(b!=(v[vv[i][ii]]<v[vv[j][jj]]))
return false;
}
return true;
}
int main(int argc, char** argv) {
freopen("episoade.in","r",stdin);
freopen("episoade.out","w",stdout);
char * str=new char[105];
gets(str);int x=strlen(str);int nn=0;
char * s =new char[3*x];int st=0;
for(int i=0;i<x;i++){
if(st==0&&isdigit(str[i])){
s[nn++]='(';
st=1;
}
else if(st==1&&!isdigit(str[i])){
s[nn++]=')';
st=0;
}
s[nn++]=str[i];
}
if(st==1)
s[nn++]=')';
int n,t;
scanf("%d%d",&t,&n);
while(t--){
for(int i=0;i<n;i++){
scanf("%d",&x);
v[x]=i+1;
}
if(eval(string(s)))
printf("1\n");
else
printf("0\n");
}
return (EXIT_SUCCESS);
}