Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- //#include <iostream>
- #include <vector>
- #include <set>
- #include <string>
- using namespace std;
- int main() {
- ifstream cin("problem2.in");
- ofstream cout("problem2.out");
- string s;
- vector<vector<pair<int, char>>> sost;
- vector<bool> isTermin;
- int n, m, k;
- cin >> s;
- cin >> n >> m >> k;
- sost.resize(n + 1);
- isTermin.resize(n + 1);
- for (int i = 0; i < k; ++i) {
- int q;
- cin >> q;
- isTermin[q] = true;
- }
- for (int i = 0; i < m; ++i) {
- int a, b;
- char c;
- cin >> a >> b >> c;
- sost[a].push_back(make_pair(b, c));
- }
- vector<set<int>> d(s.length() + 1); // в каких состояниях можем оказаться на i шаге
- d[0].insert(1);
- for (int i = 1; i <= s.length(); ++i) { // будем заполнять d[i]
- for (auto j : d[i - 1]) { // пробежимся по d[i - 1]
- for (auto q : sost[j]) {
- if (s[i - 1] == q.second) {
- d[i].insert(q.first);
- }
- }
- }
- }
- bool wasAns = false;
- for (auto i : d[s.length()]) {
- if (isTermin[i]){
- cout << "Accepts";
- wasAns = true;
- break;
- }
- }
- if (!wasAns) cout << "Rejects";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment