Pagini recente » Cod sursa (job #1661377) | Cod sursa (job #1350343) | Cod sursa (job #3227744) | Cod sursa (job #368244) | Cod sursa (job #307052)
Cod sursa(job #307052)
using namespace std;
#include <cstdio>
#include <vector>
#define Nmax 110
int n, m, a[Nmax], i, j, ok, T, p, poz[Nmax];
char v[1010];
vector <int> eval(), termen(), factor();
vector <int> eval(){
vector <int> r, r2;
vector < pair <int, int> > B;
int i, pmin, pmax;
r = termen();
if( !ok ) return r;
pmin = pmax = poz[r[0]];
for(i = 1; i < (int)r.size(); i++){
if(poz[r[0]] > pmax)
pmax = poz[r[0]];
if(poz[r[0]] < pmin)
pmin = poz[r[0]];
}
B.push_back( make_pair(pmin, pmax) );
while(v[p] == '#'){
p++;
r2 = termen();
if( !ok ) return r;
for(j = 0; j < (int)r2.size(); j++)
for(i = 0; i < (int)B.size(); i++){
if( poz[r2[j]] >= B[i].first && poz[r2[j]] <= B[i].second )
ok = 0;
}
pmin = pmax = poz[r2[0]];
for(i = 1; i < (int)r2.size(); i++){
if(poz[r2[i]] > pmax)
pmax = poz[r2[i]];
if(poz[r2[i]] < pmin)
pmin = poz[r2[i]];
}
for(i = 0 ; i < (int)r.size() ; i++)
if( poz[r[i]] >= pmin && poz[r[i]] <= pmax )
ok = 0;
B.push_back( make_pair(pmin, pmax) );
for(i = 0; i < (int)r2.size(); i++)
r.push_back(r2[i]);
}
return r;
}
vector <int> termen(){
vector <int> r, r2;
r = factor();
int rmax, r2min;
if( !ok ) return r;
while(v[p] == '>'){
p++;
r2 = factor();
rmax = poz[r[0]];
for(i = 1; i < (int)r.size(); i++)
if( poz[r[i]] > rmax )
rmax = poz[r[i]];
if( !ok ) return r;
r2min = poz[r2[0]];
for(i = 1; i < (int)r2.size(); i++)
if(poz[r2[i]] < r2min)
r2min = poz[r2[i]];
if(rmax > r2min)
ok = 0;
for(i = 0; i < (int)r2.size(); i++)
r.push_back(r2[i]);
}
return r;
}
vector <int> factor(){
vector <int> r;
if( !ok ) return r;
if(v[p] == '('){
p++;
r = eval();
p++;
return r;
}
int nr = 0;
for(; v[p] >= '0' && v[p] <= '9' ; p++)
nr = nr * 10 + v[p] - '0';
r.push_back(nr);
return r;
}
int main(){
FILE *f = fopen("episoade.in", "r");
FILE *g = fopen("episoade.out", "w");
fscanf(f,"%s",v);
fscanf(f,"%d %d", &T, &n);
for(; T ; T--){
for(i = 1; i <= n; i++){
fscanf(f,"%d", &a[i]);
poz[a[i]] = i;
}
ok = 1; p = 0;
eval();
fprintf(g,"%d\n", ok);
}
fclose(f);
fclose(g);
return 0;
}