diff options
author | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2020-01-14 18:29:11 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2020-01-14 18:29:11 +0700 |
commit | a3dd2581ed4847670f81157091016c14ca18803d (patch) | |
tree | 3362ab15de119f1e75799f58715b7683e6bfd6ca /usth/MATH2.3/5/grammar-to-automata.cc | |
parent | 65b8ebda4c47fa27ac28899fb2b29097f445b6df (diff) | |
download | cp-a3dd2581ed4847670f81157091016c14ca18803d.tar.gz |
[usth/MATH2.3] Mathemate Discretely
Diffstat (limited to 'usth/MATH2.3/5/grammar-to-automata.cc')
-rw-r--r-- | usth/MATH2.3/5/grammar-to-automata.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/usth/MATH2.3/5/grammar-to-automata.cc b/usth/MATH2.3/5/grammar-to-automata.cc new file mode 100644 index 0000000..125b3c9 --- /dev/null +++ b/usth/MATH2.3/5/grammar-to-automata.cc @@ -0,0 +1,29 @@ +#include <iostream> +#include <string> +#include <unordered_map> + +using namespace std; + +int +main () +{ + int n; + cin >> n; + + unordered_map<char, unordered_map<int, char>> automata; + unordered_map<char, int> finals; + for (int i = 0; i < n; ++i) + { + char c; + string s, t; + cin >> c >> t >> s; + if (s == "$") + finals[c] = 1; + else + automata[c][s[0] - '0'] = (s.length () == 1) ? '$' : s[1]; + } + + cout << automata.size () << endl; + for (auto& [c, m] : automata) + cout << c << '\t' << m[0] << '\t' << m[1] << '\t' << finals[c] << endl; +} |