Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <string>
- #include <algorithm>
- #include <string>
- #include <deque>
- #include <queue>
- #include <iomanip>
- #include <set>
- #include <map>
- #define F first
- #define S second
- using namespace std;
- const long double eps2 = 0.0000005;
- const long double eps1 = 1e-5;
- const long double pi = 3.1415926535897932;
- vector <int> used, p;
- vector <string> str;
- map<string, vector<int> > shrt;
- bool try_kunn(int v)
- {
- if (used[v])
- return false;
- used[v] = 1;
- for (int i = 0; i < (shrt.begin() + v).size(); i++)
- {
- int to = shrt[v][i];
- if (p[to] == -1 || try_kunn(p[to]))
- {
- p[to] = v;
- return true;
- }
- }
- return false;
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- freopen("input.txt", "r", stdin);
- // freopen("output.txt", "w", stdout);
- int n;
- cin >> n;
- p.resize(n, -1);
- str.resize(n);
- string s, st;
- int ans = 0;
- for (int t = 0; t < n; t++)
- {
- cin >> str[t];
- int k = str[t].size();
- for (int i = 0; i < k + 3; i++)
- for (int j = i + 1; j < k + 3; j++)
- for (int l = j + 1; l < k + 3; l++)
- for (int r = l + 1; r < k + 3; r++)
- {
- st = "";
- if (i < k)
- st = st + s[i];
- if (j < k)
- st = st + s[j];
- if (l < k)
- st = st + s[l];
- if (r < k)
- st = st + s[r];
- if (shrt[st].size() == 0 || shrt[st].back() != t)
- {
- shrt[st].push_back(t);
- /*ans++;
- cout << st << endl;*/
- }
- }
- }
- bool y;
- int i = 0;
- for (map<string, vector<int> > ::iterator ii = shrt.begin(); ii != shrt.end(); ii++)
- {
- used.assign(shrt.size(), 0);
- y = try_kunn(i);
- i++;
- /*for (int i = 0; i < ii -> S.size(); i++)
- cout << ii->S[i] << " ";
- cout << endl;*/
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement