Pagini recente » Algoritmul lui Dinic | Cod sursa (job #3283852) | Cod sursa (job #739680) | Statistici Mr. Noname (cezar305) | Cod sursa (job #1758856)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("episoade.in");
ofstream cout("episoade.out");
const int MAXL = 1000;
const int MAXN = 100;
char s[MAXL + 1];
int when[1 + MAXN];
int pointer;
bool ok;
pair<int, int> Parse(int priority) {
if (priority == 0) {
vector<pair<int, int> > v;
v.push_back(Parse(1));
while (s[pointer] == '#') {
pointer++;
v.push_back(Parse(1));
}
sort(v.begin(), v.end());
pair<int, int> answer = v[0];
for (int i = 1; i < v.size(); i++)
if (v[i - 1].second + 1 != v[i].first)
ok = false;
else
answer.second = v[i].second;
return answer;
}
if (priority == 1) {
pair<int, int> answer, next;
answer = Parse(2);
while (s[pointer] == '>') {
pointer++;
next = Parse(2);
if (answer.second + 1 != next.first)
ok = false;
answer.second = next.second;
}
return answer;
}
if (s[pointer] == '(') {
pointer++;
pair<int, int> answer = Parse(0);
pointer++;
return answer;
}
int answer = 0;
while (s[pointer] >= '0' && s[pointer] <= '9') {
answer = answer * 10 + s[pointer] - '0';
pointer++;
}
return make_pair(when[answer], when[answer]);
}
int main() {
cin >> s;
int tests, n;
cin >> tests >> n;
for (int test = 1; test <= tests; test++) {
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
when[x] = i;
}
pointer = 0;
ok = true;
Parse(0);
if (ok)
cout << "1\n";
else
cout << "0\n";
}
return 0;
}