Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //UVa Q200
- /******************************************************************************
- Online C++ Compiler.
- Code, Compile, Run and Debug C++ program online.
- Write your code in this editor and press "Run" button to compile and execute it.
- *******************************************************************************/
- #include <bits/stdc++.h>
- using namespace std;
- bool rec[26][26];//arr[a][b] := a > b
- vector<int> v[26];
- bool used[26];
- void func(string s1, string s2){
- for(unsigned i = 0; i < min(s1.size(), s2.size()); ++i){
- used[s1[i] - 'A'] = used[s2[i] - 'A'] = 1;
- if(s1[i] == s2[i])continue;
- if(!rec[s1[i] - 'A'][s2[i] - 'A'])v[s1[i] - 'A'].emplace_back(s2[i] - 'A');
- rec[s1[i] - 'A'][s2[i] - 'A'] = 1;
- break;
- }
- }
- vector<int> ans;
- int n;
- void dfs(int u){
- ans.emplace_back(u);
- if(ans.size() == n)return;
- for(unsigned i = 0; i < v[u].size(); ++i){
- dfs(v[u][i]);
- if(ans.size() == n)return;
- }
- ans.pop_back();
- }
- int main(){
- string s[2];
- cin >> s[1];
- bool b = 0;
- while(cin >> s[b]){
- if(s[b] == "#")break;
- func(s[!b], s[b]);
- b = !b;
- }
- for(int i = 0; i < 26; ++i)if(used[i])++n;
- for(int i = 0; i < 26; ++i){
- if(used[i])dfs(i);
- if(ans.size() == n)break;
- }
- for(int i = 0; i < ans.size(); ++i){
- cout << char(ans[i]+'A');
- }
- cout << '\n';
- return 0;
- }
RAW Paste Data