// UVa 10728 - Help! #include <iostream> #include <string> #include <vector> #include <map> #include <sstream> using namespace std; vector<string> a, b; map<string, bool> taken; map<string, string> value; int n; void add(const string & var, const string & val) { value[var] = val; taken[var] = true; } bool isgood() { value.clear(); taken.clear(); bool new_rules; do { new_rules = false; for (int i = 0; i < n; i++) { // force rules if (a[i][0] == '<' && taken["a" + a[i]]) a[i] = value["a" + a[i]]; if (b[i][0] == '<' && taken["b" + b[i]]) b[i] = value["b" + b[i]]; // find new rules if (a[i][0] == '<' && b[i][0] != '<') { add("a" + a[i], b[i]); a[i] = b[i]; new_rules = true; } else if (b[i][0] == '<' && a[i][0] != '<') { add("b" + b[i], a[i]); b[i] = a[i]; new_rules = true; } } } while (new_rules); // compare for (int i = 0; i < n; i++) if (a[i][0] != '<' && b[i][0] != '<' && a[i] != b[i]) return false; return true; } int main() { int t; cin >> t; string line; getline(cin, line); for (; t; t--) { a.clear(); b.clear(); getline(cin, line); istringstream strm1(line); string s; while (strm1 >> s) a.push_back(s); getline(cin, line); istringstream strm2(line); while (strm2 >> s) b.push_back(s); bool good = true; n = a.size(); if (n != b.size()) good = false; else good = isgood(); // print if (good) { for (int i = 0; i < n; i++) if (a[i][0] == '<') a[i] = "daniel"; if (n > 0) cout << a[0]; for (int i = 1; i < n; i++) cout << " " << a[i]; cout << endl; } else cout << "-" << endl; } return 0; }
Thursday, May 14, 2015
UVa 10728 - Help!
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment